每 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);
如您所见,效果很好!
我想以某种方式将大型数组列表过滤为每 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);
如您所见,效果很好!