带有特定步骤的Javascript for循环

Posted

技术标签:

【中文标题】带有特定步骤的Javascript for循环【英文标题】:Javascript for-loop with certain step 【发布时间】: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 等等...)。我怎么能这样做?

【问题讨论】:

【参考方案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 相同。

【讨论】:

以上是关于带有特定步骤的Javascript for循环的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript,JSON:如何在特定时间内运行 for 循环?

带有嵌套for循环的Javascript多维数组-无法正常工作

使用带有 JavaScript 模板文字函数的 for 循环

带有/ for循环按钮的Javascript jquery帮助

带有 jquery 和 javascript 的 Django for 循环列表

使用带有 JavaScript 的 for 循环时,将新列表项添加到 <ul> 项 [重复]