在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,控制台
但是,我还没有弄清楚如何将此“ hack”应用于所有数组(即使其成为全局默认值)。这是否可能,并且是否有任何副作用或不利影响(除了必须始终指定i
,即使您不使用它,我想这也是短绒的问题)?
您可以创建自己的扩展native的类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演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句