每 3 项将数组列表更改为多个数组列表

Change array list into multiple array lists every 3 items

我想以某种方式将大型数组列表过滤为每 5 个项目的多个数组,以便 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 将是 [ [1, 2, [3, 4, 5]], [6, 7, [8, 9, 10]]] 或 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 将是 [[1, 2, [3, 4, 5]], [6, 7, [8, 9, 10]], [11, 12, [13, 14] , 15]]]。 (在我的程序中所有数组都是 5 的倍数。)

我该怎么做?

我现在正在做这个

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]]]);
}

但它似乎不起作用。

谢谢,

-体素

假设您已经使用这些 answers 将数组分块为 5 的一部分,并将其存储在名为 chunks 的变量中,要将最后 3 个包含在每个块中,您可以使用 map:

const final = chunks.map((chunk) => [chunk[0], chunk[1], chunk.slice(2)]);

您将第一个和第二个元素添加到新列表中,然后将块的其余部分作为一个整体添加。

下面的演示:

// 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);

如您所见,效果很好!