迭代一个数组,一旦到达终点就返回

时间:2018-01-03 01:21:28

标签: javascript arrays iteration

我想要什么

我试图从一开始就迭代一个数组(记录所有元素)然后一旦到达结束,返回数组。一旦它再次到达开始,它将再次通过阵列。它将永远这样做。

示例:

  

数组= [1,2,3,4,5]

     

记录:1,2,3,4,5,4,3,2,1,2,3 ...

我尝试了什么

这就是我的尝试:

let a = 0;
let dir = -1;
let arr = new Array();

function setup() {
  for (let i = 0; i < 10; i++) {
    arr.push(i);
  }
}

function draw() {
  for (let el of arr) {
    console.log(el);
  }

  if (i >= arr.length || i <= 0) {
    dir *= -1;
  }

  i += dir;
}

如果您不知道,这是一个p5.js草图。 setup()函数在页面加载上运行,draw()函数重复运行。

发生了什么

This is what happened

2 个答案:

答案 0 :(得分:0)

您可以使用concatmapslicereverseforEachmap等数组函数代替循环:< / p>

&#13;
&#13;
var arr = [1,2,3,4,5];

var upDown = arr.concat(
  //not the last one or 5 will be logged twice
  arr.slice(0,-1)
  //reverse order
  .reverse()
);
upDown.forEach(
  item=>console.log(item)
);
&#13;
&#13;
&#13;

您的绘图功能可能如下所示:

var draw =(function(){
  var arr = [1,2,3,4,5];
  var upDown = arr.concat(
    arr.slice(0,-1)
    .reverse()
  );
  var index = -1;
  return function(){
    index = (index===upDown.length-1)
      ? 0
      : index+1;
    console.log(upDown[index]);
  }
}());//IIFE to set up upDown array and index

答案 1 :(得分:0)

stop_count仅用于测试,防止它永远循环。

let arr = [1,2,3,4,5];
let dir = 1;
let stop_count = 0;

while (stop_count <10) {
    let i;
    i = dir===1 ? 0 : arr.length-1;
    console.log(arr[i]);
    i+=dir;
    while (i < arr.length-1 && i >=1){
        console.log(arr[i]);
        i+=dir;
    }
    dir = dir*-1;
    stop_count += 1;
}