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

Ans*_*hul 10 javascript arrays loops circular-buffer

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

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

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

我想在JavaScript中访问它,任何想法?

Ber*_*rgi 14

试试这个:

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());
}
Run Code Online (Sandbox Code Playgroud)

如果不改变阵列,那就是

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(","));
Run Code Online (Sandbox Code Playgroud)


小智 10

只需使用模数运算符,您就可以循环方式访问数组.

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

for (var i = 0, len = arr.length; i < len; i++) {
  for (var j = 0; j < 3; j++) {
    console.log(arr[(i + j) % len])
  }
  console.log('****')
}
Run Code Online (Sandbox Code Playgroud)


wwg*_*ves 7

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

给定arr一个长度数组n和一个val存储在其中的值,该数组将通过访问索引获得i,以循环方式(更安全的方式)访问数组,而不考虑的值和符号i将是:

let val = arr[(i % n + n) % n];
Run Code Online (Sandbox Code Playgroud)

这个小技巧是必要的-某些人不能直接使用模数结果-因为JavaScript始终将模数运算作为除数(第一个操作数)和除数(第二个操作数)之间除法的余数,而不考虑其符号,而是将其赋值给其余为分红的迹象。该行为并不总是会导致模块化算术的所需“环绕”效果,并且可能导致错误地访问数组的负位置。

参考以获取更多信息:

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

  • 我不明白。(负数作为数组长度?)您能重新表述一下您想要指出的内容吗? (3认同)
  • 不幸的是,这对于“i”的负值不起作用。结果(除法的余数)将与模算术预期的结果不同。例如,在 JS 中,“(-1 % 10 + 10) % 10”的计算结果为“9”,但“Math.abs(-1 % 10)”的计算结果为“1”。 (2认同)