javascript - 使用 for-of 遍历数组时获取元素的索引

标签 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

但是,我还没有想出如何将这个“hack”应用于所有数组(即使其成为全局默认值)。这可能吗?它是否有任何副作用或缺点(除了必须始终指定 i ,即使您不使用它,我猜这对 linters 来说是个问题)?

最佳答案

您可以创建自己的类来扩展原生 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 .

关于javascript - 使用 for-of 遍历数组时获取元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37357754/

相关文章:

reactjs - React Redux 表单和连接语法

Javascript 在 Iframe 中设置下拉字段的值

c - 代码O(nlog(n))的T(n)如何?

javascript - 为什么我收到错误 "Missing } in template expression"?

c - 如何用一个函数获取没有重复值的数组

c# - 从对象列表中删除一列

javascript - 使用 ES6 访问参数对象

javascript - 在 Mobile Safari 中检测 WIFI 连接

javascript - 按日期分组但不按 Angular 分组

javascript 设置元素背景颜色