2016-06-08 14 views
12

Vorrei passare attraverso Immutable List, ho usato List.map per farlo, può funzionare, ma non va bene. c'è un modo migliore? Perché controllo ogni elemento della matrice, se l'elemento corrisponde alla mia regola, faccio qualcosa, proprio come Array.forEach, non voglio restituire nulla come Array.map.Come effettuare il looping della lista immutabile come forEach?

per esempio, è il mio lavoro ora:

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'); 
    } 
}); 

risposta

9

Il metodo List.forEach esiste per Immutable.js liste.

Tuttavia, un approccio più funzionale sarebbe utilizzando il metodo List.find come segue:

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') 

Quindi il codice non ha effetti collaterali.

+0

Grazie! Il find di lista è come 'Array.filter', quello che mi serve :) –

+2

La differenza è che' '' List.find''' restituisce la prima corrispondenza, mentre '' 'Array.filter''' fornisce un elenco di tutti elementi che soddisfano la condizione. –

+1

@SevenLee 'List.find' è molto simile a' Array.find' e 'List.filter' è come' Array.filter'. È importante ricordarlo. – Mihail

Problemi correlati