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)