在 ES6 地图上使用 for..of 循环

新手上路,请多包涵

我正在阅读 这个 在地图上使用 for.. of 循环的例子,我对这个语法有点困惑:

 var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");

for (var [key, value] of myMap) {
  console.log(key + " = " + value);
}

具体来说,我不了解正在发生的数组解构。我知道您可以使用数组解构来执行类似 let [one, two] = [1, 2]; 之类的操作,但是此示例中发生了什么? myMap 不是一个数组,那么为什么会得到正确的值呢?

我的另一个问题是,为什么顺序 key, value 在解构中,但是当你执行 forEach() 顺序是 value, key

 myMap.forEach((value, key) => {
  console.log(key + " = " + value);
});

原文由 Saad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 247
2 个回答
for (var [key, value] of myMap) {
    console.log(key + " = " + value);
}

就好像

for (let pair of myMap) {
    var [key, value] = pair;
    console.log(key + " = " + value);
}

所以它不是 myMap 必须是一个数组才能使解构工作;相反,它的每个元素在迭代时都必须是一个数组,并且迭代一个映射确实会产生数组(键/值对)。

Map#forEach 的参数顺序可能是为了与 Array#forEach 保持一致,它调用带参数的函数 (item, index) ;反过来,它可能会这样做,因为您并不总是需要索引。

原文由 Ry- 发布,翻译遵循 CC BY-SA 3.0 许可协议

稍微偏离主题但顺便说一句:

 myMap.forEach((v,k) => {});

比性能高出约 50%

 for (var [key, value] of myMap) {

}

所以也许考虑使用 Map.prototype.forEach (不要与 Array.prototype.forEach 混淆)。

原文由 Alexander Mills 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏