2016-03-24 17 views
1

私はOrderedMapのすべてのレコードの '完了'属性を変更しようとしています。これはOrderedMapです:不変のjsはすべてのネストされたレコードを変更します

const TodoItem = Record({text: '', completed: false}); 
let state = OrderedMap({'0': new TodoItem({text: 'First Item'})}); 

私の現在のコードは次のとおりです。

state.forEach((v,k) => { 
    state = state.updateIn([k.toString(),'completed'], completed => true); 
}); 
return state; 

これは動作しますが、どのように?

状態が不変で、最初の繰り返しの後にforEachが最初の状態objで実行されていますが、これは現在匿名ですか?

すべてのネストされた要素の属性を変更するための「より良い」可能性はありますか?

+0

混乱はありますか? state.forEachは、ForEachコール中に割り当てられたOrderedMap(各レコードの追加/削除のような)内のstateをforEach内で変更した場合、forEachは元の状態インスタンスで反復を続行します。 – IL55

+0

実際の混乱はありません。私は、不変の構造に対して行っている各更新のための新しいマップを生成するために、パフォーマンスの面で可能な限り最良の方法であるかどうかを尋ねていました。 – duke2

答えて

1

はい、あり -

state = state.map((todoItem)=>todoItem.set("completed", true)); 
+1

華麗な答え。ありがとう! –

関連する問題