【问题标题】:How to start over when there are no more elements in a loop?当循环中没有更多元素时如何重新开始?
【发布时间】:2017-03-16 07:59:08
【问题描述】:

假设我“想要”一个仅包含 3 个元素的数组中的 6 个元素。如果到达终点,则重新开始。

例子:

let arr = ["a", "b", "c"];
let wanted = 5;

for(let i = 0; i < wanted; i++) {
    console.log(arr[i]);
}

当然返回:

a
b
c
undefined
undefined

相反,我需要:

a
b
c
a
b

有没有办法在元素结束后从数组的开头开始?

【问题讨论】:

  • 如果 arr[i] 未定义,将 i 设置为 0。简单!!
  • @AkshayKhandelwal:循环永远不会停止。
  • 是的,我曾想过只是重置它,但由于重置是在循环中发生的,它永远不会结束。
  • 不完全重复但相似:stackoverflow.com/questions/17483149/…

标签: javascript node.js


【解决方案1】:

使用%(Remainder) 运算符获取余数。

console.log(arr[i % arr.length]);

余数将在数组索引范围内。

例如:当i到达时

  • 3 => 3 % 3 = 0
  • 4 => 4 % 3 = 1
  • 0 => 0 % 3 = 0

let arr = ["a", "b", "c"];
let wanted = 5;

for (let i = 0; i < wanted; i++) {
  console.log(arr[i % arr.length]);
}

【讨论】:

  • 你能解释一下这里到底发生了什么吗?
  • 加一个作为答案,再加一个用于调用余数运算符。
  • @PranavCBalan 只是让你解释为要点。如果不需要,请还原它。 :-)
【解决方案2】:

您可以使用(%) remainder 运算符。它将从 0 开始索引到 arr.length - 1。

第一步是

[0 % 3] === 0 whole 0 remainder, 
[1 % 3] === 0 whole 1 remainder,
[2 % 3] === 0 whole 2 remainder
[3 % 3] === 1 whole 0 remainder
[4 % 3] === 1 whole 1 remainder

let arr = ["a", "b", "c"];
let wanted = 5;

for(let i = 0; i < wanted; i++) {
    console.log(arr[i % arr.length]);
}

【讨论】:

  • 这只是一个偷来的答案...stackoverflow.com/a/42828321/1990451
  • @smnbbrv 你怎么确定?如果你会看到我的其他答案,你可以找到类似的
  • 按时间戳?
  • 如果我能找到类似的问题,您可以将问题标记为重复而不是回答,而不是回答?
  • @smnbbrv 我不会向你展示或证明任何东西。并且注意到钢铁。如果您将其命名为钢铁,那么第一个答案之后的每个答案都可能被视为被盗答案。所以祝你好运
【解决方案3】:

只需使用%

let arr = ["a", "b", "c"];
let wanted = 5;

for(let i = 0; i < wanted; i++) {
    console.log(arr[i % arr.length]);
}

【讨论】:

    【解决方案4】:
    if (i+1 == arr.length){
     console.log(arr[i]);
     i=0;
     wanted =wanted-arr.length;
    }else{
     console.log(arr[i]);
    }
    

    循环将正常工作,直到您的计数器位于最后一个元素, 然后它将被重置为 0 以重新开始,并将继续这样做,直到您达到所需的元素数量。

    【讨论】:

    • 这段代码会做什么?如果解决了,为什么会解决。请解释
    • 您的代码将 i 拼写为大写和小写,并且缺少 for 循环。
    • 哦,请让我休息一下,OP可以在他们的代码中添加sn-p,无需重新编写他的循环。
    【解决方案5】:
    let arr = ["a", "b", "c"];
    let wanted = 5;    
    
    for (let i = 0; i < wanted; i++) {
        console.log(arr[i]);
        if (arr.length == i) {
            i = 0;
        }
    }
    

    【讨论】:

    • 据我了解,如果arr.length &lt; wanted这个循环是无限的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多