2016-06-08 6 views
12

Chciałbym przelecieć przez Niezmienny List, użyłem List.map, aby to zrobić, może być pracował, ale nie jest dobry. czy istnieje lepszy sposób? Ponieważ po prostu sprawdzam każdy element w tablicy, jeśli element pasuje do mojej reguły, robię coś, tak jak Array.forEach, nie chcę zwracać czegoś takiego jak Array.map.Jak przechodzić przez niezmienną listę jak forEach?

na przykład, to jest moja praca teraz:

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

Odpowiedz

9

Sposób List.forEach istnieje Immutable.js list.

jednak bardziej funkcjonalne podejście byłoby stosując metodę List.find następująco:

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

Następnie kod nie ma skutków ubocznych.

+0

Dzięki! Lista find jest jak 'Array.filter', to czego potrzebuję :) –

+2

Różnica polega na tym, że' 'List.find''' zwraca pierwsze dopasowanie, podczas gdy' 'Array.filter''' dostarcza listę wszystkich elementy, które spełniają ten warunek. –

+1

@SevenLee 'List.find' jest prawie jak' Array.find' i 'List.filter' jest jak' Array.filter'. Ważne jest, aby o tym pamiętać. – Mihail

Powiązane problemy