在 JS 中过滤 Map 到对象的最佳方法?

问题描述 投票:0回答:1

我有一个地图,我想将其转换为对象,过滤掉不满足某些条件的条目。

我的第一个解决方案是:

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 得到广泛支持,第一个解决方案会是一个好的解决方案吗?

javascript
1个回答
0
投票

从键开始比从条目开始更安全,这样您就不会遇到重复问题,否则该方法似乎不错:

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])));

© www.soinside.com 2019 - 2024. All rights reserved.