在Javacript的简单数组循环中
for (var i=0; i<array.length; i++) {
var previous=array[i-1];
var current=array[i];
var next=array[i+1];
}
我需要在一个无限的循环中得到previous
和next
元素。
The previous element of the first element in the array is the array last element
The next element of the last element in the array is the array first element
做这件事最有效的方法是什么?我能想到的唯一方法是在每一轮中检查元素是数组中的第一个还是最后一个。
事实上,我希望以某种方式使数组成为一个闭合循环,而不是线性的。
5条答案
按热度按时间ie3xauqp1#
使用modulus:
在获取之前的内容时,请注意
+len
:我们需要这样做的原因是为了避免负索引,这是由于模数的工作方式(非常不幸的是,-x%
是-(x%)
)pxyaymoc2#
既然你在说“无限循环”我假设你的循环是这样的
实现目标的最有效的方法是最简单的方法:正在检查
很明显,将数组的长度缓存在变量中
以及(更好的风格)循环中的“变量”
请注意,如果您正在以只读方式访问数组,则有一种更快(但有点奇怪)的方法:
wvmv3b1j3#
要补充@Denys的答案-这就是创建可重用函数的方法
Demo jsfiddle
mefy6pfw4#
为了让事情简单化。
数组中的下一个元素:
对于数组中的前一个元素:
csbfibhn5#
你需要减少;一个内置的sweet函数,用于获取数组的上一个值和下一个值
有关**Reduce**的详细信息
编辑:在下面添加一些函数签名和更多信息
参数
accumulator
-:上一次调用callbackFn
得到的值。第一次调用时,如果指定,则为initialValue
,否则为array[0]
的值。currentValue
-:当前元素的值。第一次调用时,如果指定了initialValue
,则返回array[0]
的值,否则返回array[1]
的值。currentIndex
-:数组中currentValue
的索引位置。第一次调用时,如果指定了initialValue
,则为0
,否则为1
。array
-:调用了数组reduce()
。initialValue
* 可选 *accumulator
初始化为的值。如果指定了initialValue
,则callbackFn
从数组中的第一个值currentValue
开始执行。如果 * 未 * 指定initialValue
,则accumulator
初始化为数组中的第一个值,并且callbackFn
开始执行时数组中的第二个值为currentValue
。在这种情况下,如果数组为空(因此没有第一个值作为accumulator
返回),则会抛出错误。返回值
在整个数组上运行"reducer"回调函数直至完成所产生的值。
参考: