JavaScript中如何循环访问数组
我有一个类似于JavaScript中如何循环访问数组,javascript,arrays,loops,circular-buffer,Javascript,Arrays,Loops,Circular Buffer,我有一个类似于[A,B,C,D]的数组。我想在for循环中访问该数组,如 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 } var arr=[A,B,C,D]; var len=arr.len; 对于(var i=0;i尝试以下方法: var arr = ["A","B","C","
[A,B,C,D]
的数组。我想在for循环中访问该数组,如
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
}
var arr=[A,B,C,D];
var len=arr.len;
对于(var i=0;i尝试以下方法:
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());
}
var arr=[“A”、“B”、“C”、“D”];
for(var i=0,len=arr.length;ifor(var i=0;i
只需使用模运算符,就可以以循环方式访问数组
var arr=['A','B','C','D'];
对于(变量i=0,len=arr.length;i }
我做的这条班轮怎么样
var nextItem = (list.indexOf(currentItem) < list.length - 1)
? list[list.indexOf(currentItem) + 1] : list[0];
var nextItem=(list.indexOf(currentItem)
用于“就地”循环移位的单线解决方案:
const arr = ["A","B","C","D"];
arr.forEach((x,i,t) => {console.log(i,t); t.push(t.shift());});
console.log("end of cycle", arr); // control: cycled back to the original
日志:
如果只需要前3项,请使用:
arr.forEach((x,i,t) => {console.log(i,t.slice(0, 3)); t.push(t.shift());});
在回答主要问题时,有人可以使用模运算以循环方式访问数组。这可以在JavaScript中通过模运算符(%
)和解决方法实现
给定长度为n
的数组arr
和存储在其中的值val
,该值将通过访问索引i
获得,访问该数组的循环方式和更安全的方式是,忽略i
的值和符号:
let val = arr[(i % n + n) % n];
这个小技巧是必要的——有些人不能直接使用模结果——因为JavaScript总是将模运算计算为被除数(第一个操作数)和除数(第二个操作数)之间除法的剩余部分分离它们的符号,但将被除数的符号分配给其余部分。这种行为并不总是产生所需的模运算“环绕”效果,并可能导致错误访问数组的负位置
有关更多信息,请参阅:
其他解决方案:
var arr=['A','B','C','D'];
var nextVal=函数(arr){
返回arr[((nextVal.counter<(arr.length-1))?++nextVal.counter:nextVal.counter=0));
};
对于(var i=0;你认为循环列表是解决这个问题的一种方法吗?@JoãoRamires你应该使用getTime/setTime来回答你自己的问题。请看我的答案,这种方法会为每个班次创建一个数组。如果有一个像slice这样的函数,它环绕并取一定的长度,例如array.circslice(start,len)
[1,3,4].cirSlice(3,5)
结果[4,1,3,4,1]
?可以。但这不提供源数组的环绕切片。它也会因负数而失败;例如[1,2,3]
开始=1
,`len=-3`=>[2,1,3]
。我不明白。(负数作为数组长度?)你能重新表述一下你想指出的吗?为什么不让val=arr[Math.abs(i%n)];
?不幸的是,这对i
的负值不起作用。结果——除法的剩余部分——将与模运算的预期结果不同。例如,在JS(-1%10+10)中%10
计算结果为9
,但Math.abs(-1%10)
计算结果为1
。
0 Array ["A", "B", "C", "D"]
1 Array ["B", "C", "D", "A"]
2 Array ["C", "D", "A", "B"]
3 Array ["D", "A", "B", "C"]
"end of cycle" Array ["A", "B", "C", "D"]
arr.forEach((x,i,t) => {console.log(i,t.slice(0, 3)); t.push(t.shift());});
let val = arr[(i % n + n) % n];