我有一个地图,我想将其转换为对象,过滤掉不满足某些条件的条目。
我的第一个解决方案是:
let m = new Map([
["key1", { flag: true}],
["key2", { flag: false}]
])
o = Object.fromEntries(m.entries()
.filter(([k,v]) => v.flag)
.map(([k,v]) => [k, true]));
console.log(o)
但是 iterator.filter 似乎并不普遍可用。所以我想出了这个替代方案:
let m = new Map([
["key1", { flag: true}],
["key2", { flag: false}]
])
let o = Object.fromEntries(
Array.from(m.entries())
.map(([k,v]) => [k, v.flag])
.filter(v => v[1]));
console.log(o)
我认为这是更好的支持。
有更好/更快的解决方案吗?如果 iterator.filter 得到广泛支持,第一个解决方案会是一个好的解决方案吗?
从键开始比从条目开始更安全,这样您就不会遇到重复问题,否则该方法似乎不错:
let m = new Map([
["key1", { flag: true}],
["key2", { flag: false}]
])
console.log(Object.fromEntries([...m.keys()].filter(item => m.get(item).flag).map(item => [item, m.get(item).flag])));