2017-04-18 2 views
0

In vielen meinem Code mache ich so etwas wie:Kürzeste Möglichkeit, ein Array zu durchlaufen und ein neues mit fehlenden Werten zu erstellen?

return routes.map(route => processValue(route.someProperty)); 

Um ein neues Array mit nur den verarbeiteten Daten Ich brauche schnell zurück. In seiner aktuellen Form, wenn Sie nichts zurückgeben, wird das neue Array jedoch einen undefined Wert für den Index haben, wobei map() die Funktion auf dem Element des ursprünglichen Arrays ausgeführt hat.

Ich frage mich, ob es eine ähnliche, schnelle Möglichkeit gibt, etwas mit einem .map() und einem filter() gemischten implementieren, wo das neue Array nur die Elemente von der Callback-Funktion zurückgegeben hat?

+0

mögliche Duplikate: http://stackoverflow.com/questions/19520662/how- to-remove-multiple-items-from-ein-array-via-looping-in-javascript | http://stackoverflow.com/questions/40439015/javascript-filter-array-of-objects-based-on-property-values ​​ –

+0

* "wo das neue Array nur die Elemente von der Rückruffunktion zurückgegeben hat" * -> ' routes.filter (route => route.someProperty === processValue (route.someProperty)); 'Das würde natürlich fehlschlagen, wenn die" Elemente "keine einfachen Werte wären. –

Antwort

0

können Sie .reduce verwenden:

return routes.reduce((acc, route) => { 
    const value = processValue(route.someProperty); 
    if (value !== undefined) acc.push(value); 
    return acc; 
}, []); 

oder noch kleiner, solange processValue nicht ein Array zurück:

return routes.reduce((acc, route) => acc.concat(processValue(route.someProperty) || [], []); 

Ich persönlich mag .map().filter obwohl als

return routes 
    .map((route) => processValue(route.someProperty)) 
    .filter(Boolean); 
+0

Eigentlich hätte ich der 'reduce()' Dokumentation ein längeres Aussehen geben sollen, das habe ich auf den ersten Blick völlig falsch verstanden. Die Kurzform von 'reduce' ist etwas unordentlich, aber beide sind immer noch cool. Vielen Dank! :) – styke

+0

Haben Sie irgendwelche Vorstellungen über die Leistungsunterschiede zwischen der Verwendung von reduzieren und sagen, eine for-Schleife, während Sie die Werte auf eine vordefinierte var? – styke

+0

Ich persönlich bevorzuge die Filtermethode, viel sauberer. –

Verwandte Themen