2016-03-24 17 views
1

OrderedMap'in tüm Kayıtlarının 'tamamlanmış' niteliklerini değiştirmeye çalışıyorum.immutable js TÜM iç içe geçmiş kayıtları değiştir

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

Benim şu anki kodudur:

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

çalışır, ancak nasıl This OrderedMap mı?

Çalışıyor mu, çünkü durum değişkendir ve ilk yinelemeden sonra ForEach şimdi anonim olan ilk durum objesinde çalışıyor mu?

Tüm iç içe geçmiş öğelerin özelliklerini değiştirmek için başka 'daha iyi' olasılıklar var mı?

+0

mı? state.forEach, ForEach çağrısı sırasında atanan OrderedMap tarafından yinelenir, yani forEach içindeki durumu değiştirirseniz (Add/Remove Record gibi) forEach, orijinal durum örneğiyle yineleme yapmaya devam eder. – IL55

+0

Gerçek bir kafa karışıklığı yok, sadece kendimi, performans açısından, her güncelleme için immutable yapıya yaptığım yeni bir harita oluşturmak için mümkün olan en iyi yol olup olmadığını soruyordum. – duke2

cevap

1

Evet var - Nerede karışıklık

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

Parlak cevap. Teşekkürler! –