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

Array chunking - Possible in one Array?

假设我有这个

    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/

使用双 splicei 作为索引:

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

解释:

i指向我们还没有处理的array的第一个元素,或者我们添加的最后一个元素之后。
splice 接受两个参数 (array.splice(i, chunkEachBy[i])) 从位置 i 移除 array 中的一些元素,而接受三个参数的 splice 将它们全部插入到它们原来的位置刚刚取自,但现在作为一个数组(因为这就是 array.splice returns)。

另请参阅第三个参数的 array.splice documentation

已更新 fiddle:https://jsfiddle.net/b7twnurm/2/

尝试以下操作:

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