在JavaScript中,您可以使用for-of
迭代数组(这是ES6功能):
let arr = ['foo', 'bar', 'baz'];
for (let elem of arr) {
// elem = current element
}
但有时候,循环中也需要相应的元素索引;一种方法是显式使用entries
迭代器,如下所示:
for (let [i, elem] of arr.entries()) {
// elem = current element
// i = current index
}
现在,也许只是我,但是.entries()
部分使得这个模式有点混乱且可读性较差,因此我将entries
作为arr
的默认迭代器:
arr[Symbol.iterator] = Array.prototype.entries;
现在我可以把它留下来:
for (let [i, elem] of arr) {
// elem = current element
// i = current index
}
现场演示: https://jsbin.com/gateva/edit?js,console
但是,我还没有弄清楚如何将这个“黑客”应用于所有阵列(即使其成为全局默认值)。这是否可能并且它是否有任何副作用或缺点(除了必须总是指定i
,即使你不使用它,这对于短裤是个问题,我猜)?
答案 0 :(得分:2)
您可以创建自己的扩展本地Array
的类,并将其默认迭代器更改为Array.prototype.entries
:
class MyArray extends Array {}
MyArray.prototype[Symbol.iterator] = Array.prototype.entries
然后你创建一个新的MyArray实例:
const arr = new MyArray(1, 2, 3)
然后像这样迭代:
for (let [i, elem] of arr) {
console.log(`Element ${elem} at index ${i}`)
}
请参阅JS Bin demo。