1
是否在Immutable.JS中的任何功能如何從Map中刪除多個關鍵字?從Immutable.js中刪除多個嵌套關鍵字的最佳方法是什麼?
可以說,我想刪除所有嵌套鍵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。
哦!太好了,我沒有注意到我們可以鏈接不可變的方法。同樣感謝你用'withMutations()' 但我認爲你不正確的事情,我們不需要檢查路徑是否存在 - 至少'deleteIn'引發錯誤'未捕獲的錯誤:無效的keyPath' 。 你可以試試:https://codepen.io/webmato/pen/bwZjPa?editors=0012 – webmato
@webmato「但是我覺得你是不正確的,我們不需要檢查路徑是否存在」 - - 好吧,它很複雜:''a3:{b:'B'},'當你deleteIn(['b','c1'])'因爲'b'甚至不是一個對象而失敗。我認爲這個例子的根本問題是對象的未知形狀。我相信如果你更嚴格地塑造你的數據結構,你就不需要所有這些不必要的檢查。否則,是的,你必須檢查。 – zerkms