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