Ich versuche, die ES6-Pfeilfunktion zu verwenden .filter
, um Erwachsene (Jack & Jill) zurückzugeben. Es scheint, dass ich keine if-Anweisung verwenden kann.
Was muss ich wissen, um dies in ES6 zu tun?
var family = [{"name":"Jack", "age": 26},
{"name":"Jill", "age": 22},
{"name":"James", "age": 5 },
{"name":"Jenny", "age": 2 }];
let adults = family.filter(person => if (person.age > 18) person); // throws error
(8:37) SyntaxError: unknown: Unexpected token (8:37)
|let adults = family.filter(person => if (person.age > 18) person);
Mein funktionierendes ES5-Beispiel:
let adults2 = family.filter(function (person) {
if (person.age > 18) { return person; }
});
javascript
ecmascript-6
higher-order-functions
Henry Zhu
quelle
quelle
Antworten:
Pfeilfunktionen ermöglichen entweder die Verwendung eines Ausdrucks oder eines Blocks als Körper. Einen Ausdruck übergeben
entspricht dem folgenden Block
Jedoch,
ist kein Ausdruck,
if
ist eine Aussage. Daher müssten Sie einen Block verwenden, wenn Sieif
in einer Pfeilfunktion verwenden möchten :Während dies das Problem technisch löst, ist dies eine verwirrende Verwendung
.filter
, da dies darauf hindeutet, dass Sie den Wert zurückgeben müssen, der im Ausgabearray enthalten sein sollte. Der an übergebene Rückruf.filter
sollte jedoch einen Booleschen Wert zurückgeben , dhtrue
oderfalse
, der angibt, ob das Element in das neue Array aufgenommen werden soll oder nicht.Alles was Sie brauchen ist
In ES5:
quelle
false
oder zurücktrue
, daperson.age > 18
es immer entwederfalse
oder isttrue
.person
(natürlich macht es das nicht, wie Sie gezeigt haben ...). Wenn Ihre erste Korrektur dies tatsächlich getan hätte (foo => { if (person.age > 18) return person }
), würden Sie genau das erhalten, was OP im ES5-Code verwendet. Das ist zwar ein verwirrender Code, aber er funktioniert und wird das Problem lösen.return person
wird erzwingentrue
, und keine Rückkehr wird "zurückkehren"undefined
, was erzwungen wirdfalse
..filter
. Meinen Sie Pfeilfunktionen im Allgemeinen?Sie können nicht implizit mit einem zurückkehren
if
, Sie würden die Klammern benötigen:Es kann jedoch vereinfacht werden:
quelle
So einfach wie möglich
const adults = family.filter(({ age }) => age > 18 );
quelle
Hier ist meine Lösung für diejenigen, die verwenden
hook
; Wenn Sie Elemente in Ihrem Raster auflisten und das ausgewählte Element entfernen möchten, können Sie diese Lösung verwenden.quelle