2016-09-16 10 views
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' }}, 
}); 

は、私は、この例では、不変のマップからネストされたすべてのキーc0c1c2を削除したいとしましょうか?

私のソリューションはこれです:

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で変数再割り当てが好きではありません。

答えて

3

あなたはパスが存在するかどうかを確認する必要がありません(「keyPathのいずれかのキーが存在しない場合、変更は発生しません。」、以下のリンクを参照)ので、単純に呼び出しをチェーン

return value.deleteIn(['b', 'c0']).deleteIn(['b', 'c1']).deleteIn(['b', 'c2']); 

return value.withMutations(map => { 
    map.deleteIn(['b', 'c0']).deleteIn(['b', 'c1']).deleteIn(['b', 'c2']); 
}); 

参考文献:

+0

ああ!偉大な、私は不変メソッドをチェーンできることに気付かなかった。また、例えば 'withMutations()'もありがとうございます。 パスが存在するかどうかチェックする必要はありません。少なくとも、deleteInはエラーをスローします。キャッチされていないエラー:無効なキーパスです。 。 あなたは試してみることができます:https://codepen.io/webmato/pen/bwZjPa?editors=0012 – webmato

+0

@webmato「しかし、パスが存在するかどうかを確認する必要はありません。それは複雑です: 'a3:{b: 'B'}、' deleteIn(['b'、 'c1']) 'b 'はオブジェクトでもないので失敗します。この例の根本的な問題は、オブジェクトの形状が未知であると思います。私はあなたがあなたのデータ構造を形作った方がより厳密にそれらの不要なチェックをすべて必要としないと信じています。さもなければ、あなたはチェックしなければなりません。 – zerkms

関連する問題