js: лучший способ перебора вложенного объекта?

#javascript

#javascript

Вопрос:

Если я хочу получить список только types из автомобилей для этих данных:

 let items = [
      {
         magnet: [
            true
         ],
         cars: [
             {
               type: "BMW"
             }
         ],
         name: "Roby"
      },
      {
         magnet: [
            false
         ],
         cars: [
             {
               type: "Mercede"
             }
         ],
         name: "Max"
      }
    ];
 

Есть ли более эффективный способ, чем отображение через один раз, как это? Я чувствую, что это не очень хорошо, потому что я предполагаю, что в массиве есть 1 элемент cars .

 items.map(x => {
   return x.cars[0].type
})
 

Комментарии:

1. Итак, как вы ожидаете, что это будет выглядеть, если их больше одного?

2. просто массив строк всех автомобилей

3. Я бы не беспокоился о производительности перед написанием кода. Рассмотрите возможность оптимизации только в том случае, если это становится проблемой

4. items.flatMap(item => item.cars.map(car => car.type)) ?

5. итак, два цикла. отправка в массив

Ответ №1:

Нет более эффективного способа, чем перебирать все объекты и их .cars , но, конечно, есть более правильный способ, чем предположить, что у каждого объекта есть ровно один автомобиль.

Наиболее подходящим вспомогательным методом является flatMap использование либо как

 const cars = items.flatMap(item => item.cars);
const brands = cars.map(car => car.type);
 

или за один раз

 const brands = items.flatMap(item => item.cars.map(car => car.type));