Das liegt daran, dass die Pfeilfunktionen Ausdrücke akzeptieren, während Sie eine Anweisung übergeben.
Ihr Code ist irreführend: Array.prototype.map
bedeutet, dass Sie das Ergebnis irgendwie verwenden würden, während Sie es nicht sind.
Wenn Sie die Semantik Ihres Codes verbessern möchten, verwenden Sie Array.prototype.forEach
, das speziell dafür entworfen wurde, über ein Array zu iterieren und nichts zurückzugeben:
Referenzen:
Wenn Sie keine Klammern verwenden, um den Körper von Arrow-Funktionen zu definieren, sollte der Körper ein Ausdruck sein. In Ihrem Fall ist es kein Ausdruck, sondern eine if
-Anweisung.
Sie müssen es mit dem zusammengesetzten Körper definieren, so
%Vor%Oder Sie sollten es definieren, um einen Ausdruck wie diesen
zurückzugeben %Vor% Hinweis: Sie sollten dazu nicht map
verwenden. map
sollte nur verwendet werden, wenn Sie ein neues Array aus den Werten eines anderen Arrays erstellen müssen. Sie sollten forEach
verwenden, wenn Sie mit Funktionen arbeiten, die Nebenwirkungen haben. In Ihrem Fall modifizieren Sie Objekte, die außerhalb Ihrer Funktion liegen. Also wäre forEach
die beste Lösung.
Wenn ein Pfeilfunktionskörper mehr als eine Anweisung enthält, muss er in einem Block enthalten sein. Außerdem können Sie Semikolons nicht weglassen.
forEach ist semantischer (da Ihre Funktion einfach undefined zurückgibt und Sie das neue Array trotzdem nicht behalten) und Sie können den Wert von x%2
direkt verwenden :
und es gibt auch:
%Vor%Probieren Sie den obigen Code aus. Es scheint zu funktionieren.
Ich habe gerade if..else
durch den ternären Operator ( ? :
) ersetzt.
Tags und Links javascript ecmascript-6