使用for-of迭代数组时获取元素的索引

时间:2016-05-21 00:40:48

标签: javascript loops ecmascript-6

在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,即使你不使用它,这对于短裤是个问题,我猜)?

1 个答案:

答案 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