Ecmascript 6映射过滤器



按值过滤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))

当然,你可以根据你的地图值类型来更改过滤器

最新更新