首页 > 解决方案 > 循环遍历 Map 键的最快方法

问题描述

假设我有一张带有键的地图:

const map = new Map([['a', 'Apple'], ['b', 'Banana']])

我想遍历地图的'a''b')。

我知道这些循环键的方式:

Map.prototype.forEach()

map.forEach((_value, key) => {
    console.log(key)
})

优点:简单

缺点:必须忽略函数中的第一个参数 -(_value, key) =>而不仅仅是key => .

Map.prototype.keys()从然后创建数组Array.prototype.forEach()

[...map.keys()].forEach(key => {
    console.log(key)
})

优点:回调可以只是key =>

缺点:[...map.keys()]。阅读代码时可能会令人困惑,并且性能可能会降低。

for of依次通过Map.prototype[Symbol.iterator]()

for (const [key] of map) console.log(key)

优点:可能很快。易于阅读。

缺点:不是箭头函数(认为 forEach 更好)。

for of依次通过Map.prototype.keys()

for (const key of map.keys()) console.log(key)

与之前的方法非常相似。

所以我想知道哪种方式性能最好。

标签: javascriptperformanceloopsdictionarykey

解决方案


我用这些方法创建了一个JSBench。这些是从最快到最慢的结果:

  1. Map.prototype.forEach()
  2. Map.prototype.keys()从然后创建数组Array.prototype.forEach()
  3. for of依次通过Map.prototype.keys()
  4. for of依次通过Map.prototype[Symbol.iterator]()

推荐阅读