我有这个数组:
var array = [0,1,2,3,4,5,6,7,8,9,10];
以顺时针方向循环(开始 8,然后 9,然后 10,然后 0.....)我这样做:
var start = 8;
for(i = 0; i < array.length; i++){
index = (start+i)%array.length;
....
}
1)顺时针方向,有更好的方法吗?
2)要逆时针循环(从2开始,然后1,然后0,然后10...),我应该怎么做?
最佳答案
要做到与您所做的类似,从起始索引减少索引并在 trim 前添加长度:
var start = 8;
for(i = 0; i < array.length; i++) {
index = (start - i + array.length) % array.length;
// ....
}
关于“如何做得更好”,我会创建一个简单的辅助函数:
function getIndexInRange(index, length) {
var trim = index % length;
var nonNegative = trim + length;
return nonNegative % length;
}
然后一切都变得清晰了:
var start = 8;
for(i = 0; i < array.length; i++) {
var index = getIndexInRange(start + i, array.length);
// ....
}
for(i = 0; i < array.length; i++) {
var index = getIndexInRange(start - i, array.length);
// ....
}
现在您甚至可以根据需要多次迭代数组,而且它仍然有效:
for(i = 0; i < array.length * 5; i++) {
var index = getIndexInRange(start - i, array.length);
// ....
}
关于javascript - 如何从某个位置顺时针和逆时针循环数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093570/