Básicamente, lo que tengo es una matriz de objetos con varias propiedades, pero no todos tienen las mismas propiedades.
const data = [ { car: 12, airplane: 42, peoples: 2, }, { car: 12, peoples: 2, }, { car: 12, airplane: 42, peoples: 2, }, ]; Lo que quiero hacer es aplicar un filter() para filtrar los objetos con la condición a continuación. El problema es que hay objetos a los que les faltan estas propiedades y en consecuencia el código acaba rompiéndose. ¿Cuál es la mejor manera de hacer esto sin romper el código?
data.forEach((item) => item.airplane > 5);Usando Array#filter :
const data = [ { car: 12, airplane: 42, peoples: 2 }, { car: 12, peoples: 2 }, { car: 12, airplane: 42, peoples: 2 } ]; const res = data.filter(({ airplane }) => airplane && airplane > 5); console.log(res);Su opción más sucinta aquí es usar el encadenamiento opcional ( ?. ) y el operador coalescente nulo ( ?? ) -- la combinación de estos dos le permite usar alguna opción alternativa cuando falta alguna propiedad en la cadena. Por lo tanto, reescribiría su devolución de llamada como:
(item) => (item?.airplane ?? 0) > 5 En el caso de que se defina item.airplane , obtendrá el cálculo como se esperaba. Si no es así , volverá a evaluar 0 > 5 .
Debe usar filter() y necesita expandir un poco su lógica de filtro para verificar la propiedad:
const result = data.filter((item) => item.airplane && item.airplane > 5)