JS: Array.Karte nicht hinzufügen zum array
Habe ich einige Daten, die ich möchte, um eine Transformation mittels Array.prototype.map
. Aber in der map-Funktion besteht die Möglichkeit, dass ein Fehler geworfen wird, durch eine externe Funktion aufrufen. Ich möchte fangen Sie diesen Fehler, und nicht hinzufügen, dass bestimmtes Objekt, um die zurückgegebenen array. Momentan bin ich einfach wieder nicht und dann mit Array.prototype.filter
zu entfernen, um die undefinierten Werte, aber dies scheint wie eine billige Art und Weise, es zu tun.
Zu klären, ich bin auf der Suche für diese Funktionalität:
['apple','pear','banana', 'peach'].map(function(fruit){
if (fruit === 'apple') {
return undefined;
}
return 'I love to eat ' + fruit;
});
//['I love to eat pear', 'I love to eat peach', 'I love to eat banana']
Vorhandene implementatons dieser? Bin ich einfach nur über dies der falsche Weg?
- Ihr link ist auf der jQuery
.map()
Methode, nicht die Javascript-Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehr lesbar wäre;
.map()
?.map
und.filter
ist der richtige Weg zu gehen. Wenn dies der Fall ist würde ich vorschlagen einen Blick auf die async-Bibliothekmap
undfilter
in eine Methode, die aufArray.prototype
und schließen Sie dieses FWenn Sie nicht möchten, verwenden Sie einfach
for
Schleife, anstatt dannmap
versuchenreduce
diese Weise:JS:
Also die Idee ist, dass im Falle von "Ausnahme", die Sie einfach zurück
prev
array ohne es zu ändern.reduce
. Es ist natürlich möglich, ändern Sie den code so, dass push nur durchgeführt wird, wenn eine Bedingung true ist, so dass nur ein einzigesreturn prev
, aber das ist eine geringfügige nitpick. )for/forEach
Weg.Landete ich eine Zusammenlegung der beiden Methoden gemeinsam zu einer auf die
Array
Prototyp. Wie @Benmj erwähnt, könnte man alternativ diese in einem benutzerdefinierten utility lib.Wie gesagt in den Kommentaren, kombinieren Sie diese mit einem filter. Zum Glück, das ist einfach, denn Sie können die Kette array-Methoden:
update
Einer der Mieter der funktionalen Programmierung ist, dass Sie das erstellen von einfachen Bausteinen, die keine Nebenwirkungen haben. Was die OP beschreibt im wesentlichen das hinzufügen einer Nebenwirkung zu
.map
, und diese Art von Verhalten sollte vermieden werden.Array.prototype
dass automatisch verbindet die beiden.map(toSomething).filter(outUndefined)
wenn Sie definierentoSomething
undoutUndefined
als Funktionen separat irgendwo 🙂Die Antwort oben kann noch weiter gesenkt werden.
Diesem code-snippet kann tatsächlich noch weiter gesenkt werden. Immer vermeiden, drängen in den array, wenn Sie können, imo.