javascript - 如何从某个位置顺时针和逆时针循环数组?

标签 javascript arrays loops iteration

我有这个数组:

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/

相关文章:

JavaScript 反转循环时出现问题

javascript - 循环范围 : 1 to 1000 的 Json mustache

javascript - 防止浏览器自动填写表单域

带有 webforms 的 JavaScript,为什么要 RegisterClientScript?

javascript - Jquery onclick 不执行任何操作

java - Trie vs. 后缀树 vs. 后缀数组

javascript - 如何在 angularjs 中按 id 数组对对象列表进行排序?

java - 尝试向数组中的对象添加信息

javascript - ckeditor 并在用户输入时显示用户数据

c# - 在 C# 中比较一个 int 和多个 int 数组