gpt4 book ai didi

javascript - 从 Immutable.js Map 中删除多个嵌套键的最佳方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:40 24 4
gpt4 key购买 nike

Immutable.JS 中是否有任何功能可以从 Map 中删除多个键?

假设我想从本例中的不可变映射中删除所有嵌套键 c0c1c2:

const x = fromJS({
a1: 'A',
a2: { b: { c0:'C0', c1:'C1' } },
a3: { b:'B' },
a4: { b: { c:'C', c1:'C1', c2:'C2' }},
a5: { b: { c: { d:'D', d1:'D1' }}},
a6: { b: { c2:'c2' }},
});

有什么简单的方法可以做到这一点吗?

我的解决方案是这样的:

const { fromJS, Map } = Immutable;

const x = fromJS({
a1: 'A',
a2: { b: { c0:'C0', c1:'C1' } },
a3: { b:'B' },
a4: { b: { c:'C', c1:'C1', c2:'C2' }},
a5: { b: { c: { d:'D', d1:'D1' }}},
a6: { b: { c2:'c2' }},
});

console.log(x.toJS());

const newX = x.map((value, key) => {
if (Map.isMap(value)){
value = value.hasIn(['b', 'c0']) ? value.deleteIn(['b', 'c0']) : value;
value = value.hasIn(['b', 'c1']) ? value.deleteIn(['b', 'c1']) : value;
value = value.hasIn(['b', 'c2']) ? value.deleteIn(['b', 'c2']) : value;
}
return value;
});

console.log('----------------------------');
console.log(newX.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

但我不喜欢在 value = value.hasIn(... 和 ESLint 中重新分配变量。

最佳答案

您不需要检查路径是否存在(“如果 keyPath 中的任何键不存在,则不会发生任何更改。”,请参阅下面的链接),因此只需链接调用

return value.deleteIn(['b', 'c0']).deleteIn(['b', 'c1']).deleteIn(['b', 'c2']);

此外,当您进行多个突变时,使用 withMutations 可能会有好处:

return value.withMutations(map => {
map.deleteIn(['b', 'c0']).deleteIn(['b', 'c1']).deleteIn(['b', 'c2']);
});

引用资料:

关于javascript - 从 Immutable.js Map 中删除多个嵌套键的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39541553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com