繁体   English   中英

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

[英]what is the best way to delete mutiple nested keys from Immutable.js Map

在 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']);
});

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM