web*_*ato 3 javascript immutable.js
在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' }},
});
Run Code Online (Sandbox Code Playgroud)
有没有简单纯粹的方法怎么做?
我的解决方案是:
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());Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>Run Code Online (Sandbox Code Playgroud)
但我不喜欢变量重新分配,value = value.hasIn(...也不喜欢ESLint.
您不需要检查路径是否存在("如果任何密钥keyPath不存在,将不会发生任何更改.",请参阅下面的链接),因此只需链接呼叫
return value.deleteIn(['b', 'c0']).deleteIn(['b', 'c1']).deleteIn(['b', 'c2']);
Run Code Online (Sandbox Code Playgroud)
此外,当您进行多次突变时,使用它可能是有益的withMutations:
return value.withMutations(map => {
map.deleteIn(['b', 'c0']).deleteIn(['b', 'c1']).deleteIn(['b', 'c2']);
});
Run Code Online (Sandbox Code Playgroud)
参考文献:
| 归档时间: |
|
| 查看次数: |
1350 次 |
| 最近记录: |