Если возможно, я бы, вероятно, сделал бы некоторую массивацию необработанных данных, чтобы получить их в форме, где вы можете отфильтровать на верхнем уровне и убедиться, что вы не имеете дело со всеми возможными нулями везде в вашем коде. Я также избавился бы от проверки на cars
, гарантируя, что всегда есть пустой список автомобилей. Таким образом, фильтр и все остальное будет работать.
Я бы, наверное, стрелял, чтобы сгладить автомобильные объекты в отдельные машины со всеми подпорками;вот так:
const data = {
"cars": [
{
"year": 2020,
"make": "toyota",
"model": "corolla",
"type": "sedan",
"doors" : 2
},
{
"year": 1986,
"make": "toyota",
"model": "supra",
"type": "sedan",
"doors" : 2
}
]
};
Я бы не использовал несколько цепных фильтров для этого, я просто показываю, насколько проще было бы фильтровать более напрямую и упростить все седаны, двухдверные седаны и т. д. ваш код и life :)
let results = data
.cars
.filter(car => car.type === 'sedan') // all sedans
.filter(car => car.doors === 2) // two-door sedans
.filter(car => car.model === 'corolla'); // two-door corollas
Конечно, как только вы помассируете его, вы можете изменить порядок фильтров, чтобы они были более прямыми;вот так (при условии, что вы знаете, что венчик - это седан, и вам нужны только двухдверные модели):
let results = data
.cars
.filter(car => car.model === 'corolla' && car.doors === 2);