按值过滤Map中数据的最佳方法是什么?
我已经实现了forEach
,然后将键值添加到另一个Map(因为不建议在迭代时删除该Map)
theMap.forEach((value, key) => { if (value !== 'something') { otherMap.set(key, value)}})
有没有更有效的方法来按值过滤Map?我尝试使用lodash
过滤功能,但无法实现…
可能最简单的方法是在迭代时创建一个临时数组,比如
Array.from(theMap).forEach(([key, value]) => {
if (someFilterLogic) theMap.delete(key);
});
或者创建一个新的Map
,例如
theMap = new Map(Array.from(theMap).filter(([key, value]) => someFilterLogic));
通常,对JS代码"高效"的担忧最好留给探查器。不同浏览器和不同版本的高效性差异很大。除非你已经分析并明确知道某个问题是瓶颈,或者用一个真正不正确的算法运行时编写了代码,否则不要担心
我想要
var m = new Map()
m.set("a", {x: 1})
m.set("b", {x: 2})
m.set("c", {x: 3})
var f = new Map([...m].filter(v => v[1].x >= 3))
当然,你可以根据你的地图值类型来更改过滤器