Javascript for循环,具有特定步骤

时间:2017-06-22 22:08:43

标签: javascript arrays for-loop typescript

我有一个带有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等等......)。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您的功能需要一个单独的参数用于步幅和每个部件的大小。它在递增for循环变量时使用步幅,在获取切片时使用大小。

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

generator function无需存储中间结果。引入偏移量参数允许您跳过前五个值0, 1, 2, 3, 4, 5

&#13;
&#13;
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;
&#13;
&#13;

除了这些特殊性之外,此实现与Barmar's answer相同。