How to get the previous and next elements of an array loop in JavaScript?

匿名 (未验证) 提交于 2019-12-03 02:47:02

问题:

In a simple array loop of Javacript as

for (var i=0; i<array.length; i++) {  var previous=array[i-1]; var current=array[i]; var next=array[i+1];  }

I need to get the previous and next elements in an unlimited cycle. For example,

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

What can be the most efficient way to do this. The only way I can think of is to check if the element is the first or last in the array in every round.

In fact, I hope to make the array a closed cycle somehow, rather than linear.

回答1:

as you're talking about "unlimited cycle" I assume your loop is something like that

var i = 0,     l = array.length;  while( true ) // keep looping {     if(i >= l) i = 0;      // the loop block      if(/* something to cause the loop to end */) break; // <-- this let execution exit the loop immediately      i+=1; }

The most efficient way to achieve your goal is the naive one: checking

    var previous=array[i==0?array.length-1:i-1];     var current=array[i];     var next=array[i==array.length-1?0:i+1];

obviously cache the length of the array in a variable

var l = array.length;

and (better style) the "vars" out of the cycle

var previuos,     current,     next;

Note that if you are accessing the array read only there would be a faster (but somewhat strange) way:

l = array.length; array[-1] = array[l-1]; // this is legal array[l] = array[0];  for(i = 0; i < l; i++) {     previous = array[i-1];     current = array[i];     next = array[i+1]; }  // restore the array  array.pop();  array[-1] = null;


回答2:

Use modulus :

var len = array.length;  var current = array[i]; var previous = array[(i+len-1)%len]; var next = array[(i+1)%len];

Note the +len when getting the previous: the reason we need this is to avoid negative indexes, due to the way modulus works (very unfortunately, -x% is -(x%))



回答3:

To add to @Denys answer - this is how you can create a reuseable function

var theArray = [0, 1, 2, 3, 4, 5]; var currentIndex = 0;  function getAtIndex(i) {     if (i === 0) {         return theArray[currentIndex];     } else if (i < 0) {         return theArray[(currentIndex + theArray.length + i) % theArray.length];     } else if (i > 0) {         return theArray[(currentIndex + i) % theArray.length];     } }  // usage getAtIndex(-2)  // you can even go crazy and it still works getAtIndex(500)

Demo jsfiddle



回答4:

you need reduce; a built sweet function to get previous and next values of array

[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, currentIndex, array) {   return previousValue + currentValue; });


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!