[英]what is the best way to delete mutiple nested keys from Immutable.js Map
在 Immutable.JS 中是否有任何功能如何从 Map 中删除多个键?
假设我想从这个例子中的不可变映射中删除所有嵌套的键c0
、 c1
、 c2
:
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.