【问题标题】:Javascript for-loop with certain step带有特定步骤的Javascript for循环
【发布时间】:2017-11-26 08:43:51
【问题描述】:

我有一个包含100 元素的数组,我想从第 10 到第 15 (10, 11, 12, 13, 14, 15) 取一个元素,而不是从第 20 到第 25、从第 30 到第 35、从第 40 到第 45 以及从第 50 到第 55,所以我总是有一个gap= 4 并存储到一个新的二维值。我发现了如何存储到二维数组,但我怎么能做到这一点呢?

这就是我如何制作一个大小为 6 的块(因为我总是需要“十年”的前六个元素)

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

【问题讨论】:

    标签: javascript arrays for-loop typescript


    【解决方案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));

    【讨论】:

    • @AnnaF 如果回答了您的问题,请标记为答案
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-30
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多