在 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/