如何在 JavaScript 中以循环方式访问数组

新手上路,请多包涵

我有一个类似 [A,B,C,D] 的数组。我想在 for 循环中访问该数组,如下所示

var arr = [A,B,C,D];

var len = arr.length;
for(var i = 0; i<len; i++){
    0 - A,B,C
    1 - B,C,D
    2 - C,D,A
    3 - D,A,B
}

我想像在 JavaScript 中那样访问它,有什么想法吗?

原文由 Anshul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 491
2 个回答

尝试这个:

 var arr = ["A","B","C","D"];
for (var i=0, len=arr.length; i<len; i++) {
    alert(arr.slice(0, 3).join(","));
    arr.push(arr.shift());
}

如果不改变数组,它将是

for (var i=0, len=arr.length; i<len; i++) {
    var str = arr[i];
    for (var j=1; j<3; j++)
        str += ","+arr[(i+j)%len]; // you could push to an array as well
    alert(str);
}
// or
for (var i=0, len=arr.length; i<len; i++)
    alert(arr.slice(i, i+3).concat(arr.slice(0, Math.max(i+3-len, 0)).join(","));

原文由 Bergi 发布,翻译遵循 CC BY-SA 3.0 许可协议

回答主要问题,有人可以使用 模运算 以循环方式访问数组。这可以在 JavaScript 中使用模运算符 ( % ) 和解决方法来实现。

Given an array arr of a length n and a value val stored in it that will be obtained through an access index i , the以循环方式和更安全的方式访问数组,忽略 i 的值和符号,将是:

 let val = arr[(i % n + n) % n];

这个小技巧是必要的——有人不能直接使用模数结果——因为 JavaScript 总是将模数运算计算为被除数(第一个操作数)和除数(第二个操作数)之间除法的余数,不考虑它们的符号而是赋值给余数是股息的符号。该行为并不总是会产生所需的模运算“环绕”效果,并可能导致错误访问数组的负数位置。

更多信息参考:

  1. https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic
  2. https://en.wikipedia.org/wiki/Modular_arithmetic
  3. https://en.wikipedia.org/wiki/Modulo_operation
  4. https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e

原文由 wwgoncalves 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题