Quiero filtrar una gran lista de arreglos en múltiples arreglos por cada 5 elementos de cierta manera para que [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sea [[1, 2, [3, 4, 5]], [6, 7, [8, 9, 10]]] o [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 , 14, 15] sería [[1, 2, [3, 4, 5]], [6, 7, [8, 9, 10]], [11, 12, [13, 14, 15]]] . (Todas las matrices serán un múltiplo de 5 en mi programa).
¿Cómo haría esto?
Ahora mismo estoy haciendo esto
for (var i = 1; i < (stoneTextureUnfiltered.length+1)/1.01; i++) { stoneTexture.push([stoneTextureUnfiltered[i], stoneTextureUnfiltered[i+1], stoneTextureUnfiltered[i+2], [stoneTextureUnfiltered[i+3], stoneTextureUnfiltered[i+4], stoneTextureUnfiltered[i+5]]]); }pero parece que no funciona.
Gracias,
-Vóxel
Suponiendo que ya ha fragmentado la matriz en partes de 5 con estas respuestas y está almacenada en una variable llamada chunks , para envolver los últimos 3 en cada fragmento, puede usar map :
const final = chunks.map((chunk) => [chunk[0], chunk[1], chunk.slice(2)]);Agrega el primer y segundo elemento a la nueva lista, luego agrega el resto del fragmento como un todo.
Demostración a continuación:
// using second answer var perChunk = 5 // items per chunk var inputArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] var chunks = inputArray.reduce((resultArray, item, index) => { const chunkIndex = Math.floor(index/perChunk) if(!resultArray[chunkIndex]) { resultArray[chunkIndex] = [] // start a new chunk } resultArray[chunkIndex].push(item) return resultArray }, []) // answer below const final = chunks.map((chunk) => [chunk[0], chunk[1], chunk.slice(2)]); console.log(final);Como puedes ver, ¡funciona muy bien!