数组分块 - 可能在一个数组中?

时间:2015-04-13 12:48:38

标签: javascript arrays chunking

让我说我有这个

    var array =[23,345,6,765,54423,45654,7657,43,43,5,765,3456,768,897,545,645,87,4556,432,543,534];
var chunkEachBy = [3,2,1,5,6,4];

var chunked = [];


for(var i =0, l = chunkEachBy.length; i < l; i++)
{
     chunked.push(array.splice(0, chunkEachBy[i]));   
}

输出:

[Array[3], Array[2], Array[1], Array[5], Array[6], Array[4]]

只需将array整理成chunkEachBy的长度,然后为每个chunkEachBy分块。

我的问题是,在这个名为chunked的情况下,不是将结果推送到单独的数组中,而是可以对原始数组进行所有操作并产生相同的结果吗?

JSFiddle - https://jsfiddle.net/b7twnurm/1/

2 个答案:

答案 0 :(得分:11)

使用带有splice的双i作为索引:

array.splice(i, 0, array.splice(i, chunkEachBy[i]));

说明:

i指向我们尚未处理的array的第一个元素,或指向我们添加的最后一个元素之后。
splice采用两个参数(array.splice(i, chunkEachBy[i]))从位置array中移除i中的多个元素,并且采用三个参数的元素将它们全部插入到它们所处的位置刚从中取出,但现在作为一个数组(因为那是array.splice返回的内容。)

另请参阅array.splice documentation了解第三个参数。

更新了小提琴:https://jsfiddle.net/b7twnurm/2/

答案 1 :(得分:1)

尝试以下操作:

var array = 23,345,6,765,54423,45654,7657,43,43,5,765,3456,768,897,545,645,87,4556,432,543,534];
var chunkEachBy = [3,2,1,5,6,4];
var chunked = [];

for(var i =0, l = chunkEachBy.length; i < l; i++)
{
     array.unshift(array.splice(i, chunkEachBy[i]));   
}