2016-06-08 23 views
12

Immutable List ile döngü yapmak isterim, bunu yapmak için List.map kullandım, işe yarayabilir, ama iyi değil. daha iyi bir yolu var mı Dizideki her elemanı kontrol ettiğimden, eğer eleman benim kuralımla eşleşiyorsa, ben de Array.forEach gibi bir şey yapıyorum, Array.map gibi bir şey döndürmek istemiyorum.Nasıl Immutable listesi için forEach gibi döngü?

let currentTheme = ''; 
let selectLayout = 'Layout1'; 
let layouts = List([{ 
    name: 'Layout1', 
    currentTheme: 'theme1' 
},{ 
    name: 'Layout2', 
    currentTheme: 'theme2' 
}]) 


layouts.map((layout) => { 
    if(layout.get('name') === selectLayout){ 
    currentTheme = layout.get('currentTheme'); 
    } 
}); 

cevap

9

yöntem List.forEach Immutable.js listeleri için var: Örneğin

, şimdi işim. aşağıdaki gibi

Ancak, daha işlevsel bir yaklaşım List.find yöntemiyle olurdu:

let selectLayoutName = 'Layout1'; 
let layouts = List([Map({ 
    name: 'Layout1', 
    currentTheme: 'theme1' 
}),Map({ 
    name: 'Layout2', 
    currentTheme: 'theme2' 
})]) 


selectLayout = layouts.find(layout => layout.get('name') === selectLayoutName); 
currentTheme = selectLayout.get('currentTheme') 

Sonra kod yan etkileri yoktur.

+0

Teşekkürler! Liste, 'Array.filter' gibi, ihtiyacım olana benziyor :) –

+2

Fark, '' List.find''' ilk eşleşmeyi döndürürken, '' 'Array.filter''' listesi koşulu karşılayan unsurlar. –

+1

@SevenLee 'List.find', Array.find' ve' List.filter' gibi Array.filter' gibi. Bunu hatırlamak önemlidir. – Mihail