我有一个带有100
元素的数组,我想从第10到第15 (10, 11, 12, 13, 14, 15)
,而不是从第20到第25,而不是从第30到第35,第40到第45和第50到55号,所以我总是有gap= 4
并存储到新的2D值。我发现了如何存储到2D阵列,但我怎么能做到这个差距呢?
这就是我如何制作一个大小为6的块(因为我总是需要前六个元素"十年和#34;)
var newArr = [];
while(arr.length) newArr.push(arr.splice(0,6));
或
function splitArray(array, part) {
var tmp = [];
for(var i = 0; i < array.length; i += part) {
tmp.push(array.slice(i, i + part));
}
return tmp;
}
console.log(splitArray(m1, 6));
但首先我必须制作一个新的元素数组(10-15,20-25等等......)。我怎么能这样做?
答案 0 :(得分:1)
您的功能需要一个单独的参数用于步幅和每个部件的大小。它在递增for
循环变量时使用步幅,在获取切片时使用大小。
function splitArray(array, stride, size) {
var tmp = [];
for(var i = 0; i < array.length; i += stride) {
tmp.push(array.slice(i, i + size));
}
return tmp;
}
var m1 = [];
for (var i = 0; i < 100; i++) {
m1.push(i);
}
console.log(splitArray(m1, 10, 6));
&#13;
答案 1 :(得分:0)
generator function无需存储中间结果。引入偏移量参数允许您跳过前五个值0, 1, 2, 3, 4, 5
:
function* splitArray(array, stride, size, offset = 0) {
for (let i = offset; i < array.length; i += stride) {
yield array.slice(i, i + size);
}
}
// Example:
const array = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
console.log(...splitArray(array, 10, 6, 10));
&#13;
除了这些特殊性之外,此实现与Barmar's answer相同。