1
マップから複数のキーを削除する方法は不変です。それを行うにはどのように任意の単純純粋な方法はありImmutable.jsから複数のネストされたキーを削除する最も良い方法は何ですか?
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' }},
});
:
は、私は、この例では、不変のマップからネストされたすべてのキーc0
、c1
、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はエラーをスローします。キャッチされていないエラー:無効なキーパスです。 。 あなたは試してみることができます:https://codepen.io/webmato/pen/bwZjPa?editors=0012 – webmato
@webmato「しかし、パスが存在するかどうかを確認する必要はありません。それは複雑です: 'a3:{b: 'B'}、' deleteIn(['b'、 'c1']) 'b 'はオブジェクトでもないので失敗します。この例の根本的な問題は、オブジェクトの形状が未知であると思います。私はあなたがあなたのデータ構造を形作った方がより厳密にそれらの不要なチェックをすべて必要としないと信じています。さもなければ、あなたはチェックしなければなりません。 – zerkms