2016-03-24 43 views
1

我试图修改OrderedMap的所有记录的'completed'属性。这是OrderedMap:immutable 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通过OrderedMap进行迭代,在forEach调用期间分配,即如果您在forEach中更改状态(如add/remove Record)forEach将继续使用原始状态实例进行迭代。 – IL55

+0

没有真正的混淆,我只是问自己,如果这是在性能方面最好的方式来为每个更新生成一个新的映射,以便对不可变结构进行更新。 – duke2

回答

1

是的,有 -

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

明智的答案。谢谢! –