让我说我有这个
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/
答案 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了解第三个参数。
答案 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]));
}