数组分块 - 可能在一个数组中吗?
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/
使用双 splice
和 i
作为索引:
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]));
}
假设我有这个
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/
使用双 splice
和 i
作为索引:
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]));
}