objetos objects example es6 buscar array javascript ecmascript-6 higher-order-functions

objects - javascript array select



Cómo usar ES6 Fat Arrow para.filter() una matriz de objetos (3)

Estoy tratando de usar la función de flecha ES6 con .filter para devolver adultos (Jack & Jill). Parece que no puedo usar una declaración if.

¿Qué necesito saber para hacer esto en ES6?

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

Mi ejemplo de trabajo de ES5:

let adults2 = family.filter(function (person) { if (person.age > 18) { return person; } });


Parece que no puedo usar una declaración if.

Las funciones de flecha permiten usar una expresión o un bloque como su cuerpo. Pasando una expresión

foo => bar

es equivalente al siguiente bloque

foo => { return bar; }

Sin embargo,

if (person.age > 18) person

no es una expresión, if es una declaración. Por lo tanto, tendría que usar un bloque, si quisiera usar if en una función de flecha:

foo => { if (person.age > 18) return person; }

Si bien eso técnicamente resuelve el problema, este es un uso confuso de .filter , porque sugiere que debe devolver el valor que debe estar contenido en la matriz de salida. Sin embargo, la devolución de llamada pasada a .filter debería devolver un valor booleano , es decir, true o false , que indica si el elemento debe incluirse en la nueva matriz o no.

Entonces todo lo que necesitas es

family.filter(person => person.age > 18);

En ES5:

family.filter(function (person) { return person.age > 18; });


No puede regresar implícitamente con un if , necesitaría las llaves:

let adults = family.filter(person => { if (person.age > 18) return person} );

Sin embargo, se puede simplificar:

let adults = family.filter(person => person.age > 18);


Tan simple como puede usar const adults = family.filter(({ age }) => age > 18 );

const family =[{"name":"Jack", "age": 26}, {"name":"Jill", "age": 22}, {"name":"James", "age": 5 }, {"name":"Jenny", "age": 2 }]; const adults = family.filter(({ age }) => age > 18 ); console.log(adults)