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

希姆·维达斯(ŠimeVidas)

在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,即使您不使用它,我想这也是短绒的问题)?

MichałPerłakowski

您可以创建自己的扩展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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

遍历数组时出现jq错误:无法使用字符串“ <key>”索引数组

在遍历数组时使用 list[] 而不是 range() 时列出索引超出范围

如何使用 JS 遍历数组并选择没有索引值的元素

使用$ .parseJSON()时无法遍历数组

在遍历数组时使用jQuery .get()前置的元素在页面刷新时以不同顺序加载

使用流遍历列表时如何获取元素索引?

如何在使用map函数遍历数组时更新一个特定元素的状态

使用 forEach 循环遍历数组时无法从 JSON 对象获取值

使用数组列表作为索引遍历数组以从数据集中绘制20个图像时遇到麻烦

遍历数组以对样式元素使用数据属性,但仅获取数组中的最后一个值

使用空元素遍历数组(ES6)

在遍历数组以删除空值时使用unset()

使用getElementbyID遍历数组时返回null

使用 NgFor 循环遍历数组时出错

使用foreach遍历数组

使用地图方法Javascript遍历数组中的所有数组索引

使用* ngFor遍历数组,使用* ngIf选择数组中要列出的元素

如何使用jQuery遍历数组数组?

使用函数递归遍历数组数组

使用 Mustache 遍历数组数组

.map() 是否会使用 if 条件循环遍历数组中的所有索引?| JS反应

如何使用ng-click编写函数以遍历数组的索引

使索引遍历数组并打印出元素?

使用hashCode获取数组Java元素的索引

当我在打字稿中使用减少数组函数时如何遍历数组?

JSX中断...使用生成条件的JSX元素的地图循环遍历数组

如何循环遍历数组列表并显示不使用 system.out.println 语句存储的元素?

使用Array.FindAll()遍历数组

如何使用JavaScript循环遍历数组