在给定偏移量大于数组的情况下,在数组上无缝循环,向前或向后循环
Loop seamlessly over an array, forwards or backwards given an offset larger than the array
这与我之前提出的问题类似(在数组中向前和向后选择X量,如果需要,循环到开头和结尾)
但是我很难使答案适应我试图解决的不同问题。
给定任意数组和当前索引
[a, b, c, d, e, f, g, h, i, j, k]
假设当前指数目前为 0 (a)
我需要找到一个新索引,给定 n 的偏移量(假设 30,向后也可能是负数)。这样它就会遍历数组,从开头到最后继续(或者如果你向后循环,从最后继续),然后只返回新的数组索引。
我已经设法调整了类似问题的答案以向前移动阵列,但是当我尝试将其更改为向后移动时,它中断了。
function crawlArrayForwards(array, index, n){
var finalIndex;
for (var i = index, len = array.length; i <= index + n; i++) {
finalIndex = (i + len) % len;
}
return finalIndex;
}
看,你不需要 for 循环或任何东西。您只需要将数字与其符号相加并取模数即可。
function crawlArray(array, index, n) {
return ((index + n) % array.length + array.length) % array.length;
}
仅此而已。应使用 n 的正值或负值。
它并不完全优雅,但是如果你有一个前进的工作方法,你可以在开头放一个"if"语句,检查它是否大于0。如果不是,你可以反转所有内容,将偏移量乘以 -1,然后无论如何都要这样做!:D
好吧,
如果你有a
作为你当前的索引,b
作为你的目标索引(可能大于或小于长度或零)
比
b2 = b % (list.length - 1)
在数组中提供有效的索引。
如果你减去b2 - a = d
你知道是走多少步,也是向上还是向下,取决于d
是大于还是小于零
for(var i = a; i !== b2; i += (d > 0) ? 1 : -1) {
}
相关文章:
- 如何将angularjs中的javascript字符串输出为循环数组
- 如何从某个位置顺时针和逆时针循环数组
- 赢得't循环数组javascript
- 通过循环数组内容
- 使用RegExp循环数组而不是for循环(Javascript)
- 如何在背景图像的循环数组中预加载图像
- 如何在循环数组内部推送变量值
- Javascript循环数组无限不起作用
- 如何循环数组
- 如何使用Handlebars循环数组对象和模板
- PHP同时循环数组数据显示到javascript中
- 如何使用上一个/下一个功能循环数组中的图像
- 如何循环数组并保持它们之间的索引增长
- Javascript循环数组以查找可被3整除的数字
- 以变量作为属性的循环数组
- 嵌套的“for”循环 - 数组未定义
- 在具有主干和车把的模型中循环数组
- 数组在 for 循环与第二个 for 循环数组 JavaScript 合并
- 对于javascript和jquery的循环数组问题
- 在循环数组 javascript 后替换对象属性值中的字符串