如何使for循环迭代而不是通过数组

时间:2015-11-05 08:00:27

标签: javascript ecmascript-6

如何使es6中的for of循环从数组中的最后一项开始并向下转到第一项,而不是通常如何使用variable++行为从头到尾迭代在数组的索引中。

2 个答案:

答案 0 :(得分:4)

for循环是单向的,继续通过迭代器的自然顺序。你不能改变迭代器的方向。

当然,您可以使用简单的for (let i = theArray.length - 1; i >= 0; --i) { let entry = theArray[i]; // ... } 循环:

for..of

...但是为此使用一个交互器(例如,使用Array#reverse),你必须改变它迭代的内容,或者它使用的迭代器。

一种方法是先颠倒数组的顺序。不幸的是,for (let entry of theArray.slice().reverse()) { // ... } 修改了数组到位,因此如果要保持数组的原始顺序,则必须首先克隆它(live example on Babel's REPL):

function *backward(a) {
  for (let i = a.length - 1; i >= 0; --i) {
    yield a[i];
  }
}

另一种方法是编写一个可重用的生成器函数,它在数组中向后循环:

let theArray = ["one", "two", "three"];
for (let entry of backward(theArray)) {
  console.log(entry);
}

然后:

backward

Live example on Babel's REPL

作为RGraham points out,既然我们可以子类化数组,你甚至可以创建一个数组子类,它提供width作为它的默认迭代器。

天哪,这么多选择。 : - )

答案 1 :(得分:-2)

const array = [1,2,3,4,5];
for (let i = array.length; i--;) {
    console.log(array[i]);
}

//5
//4
//3
//2
//1

Babel Repl