Лучший способ использовать .map

У меня есть несколько массивов, которые мне нужно перебрать.

Ниже приведен код, который я написал, как я могу избежать нескольких forEach.

  @Input() content: any;
  public sections:any;
      ngOnInit() {        
        this.content.forEach(content => {
          content.block.forEach(response => {
            this.service.createComponent(response, type);
          });
        });
      }

Как я могу уменьшить количество строк выше и улучшить качество кода?

Ваш вопрос не ясен. Но this.content.map(data => this.sections = data.sections) устанавливает this.sections на последнее data.sections из content

adiga 06.03.2019 14:59

не уверен, как вы ожидаете, что не сделаете две петли....

epascarello 06.03.2019 15:12

да. и this. sections как array

stack s 06.03.2019 15:12

SO не является основным местом для обзор кода, может быть Обзор кода. Кроме того, запрос улучшение кода является слишком широким и основанным на мнении, что здесь не по теме.

Asons 06.03.2019 15:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прежде всего, array.map НЕ для зацикливания. Это работа array.forEach. array.map используется для создания массива из другого массива с необязательным преобразованием каждого значения.


this.content.map(data => this.sections = data.sections);

Что это делает, так это присваивает последний элемент в this.contentthis.sections. Для этого не нужно array.map. Вы можете просто получить последний элемент через его индекс.

this.sections = this.content[this.content.length - 1]

Вы не можете избежать нескольких циклов, если ваши данные вложены. Но что вы могли бы сделать, чтобы улучшить читаемость, так это превратить вложенный цикл в плоскую серию циклов. В вашем коде вам нужен response. Итак, давайте сначала сгладим this.sections, тогда пройдемся по нему.

this.sections
  .map(rjfBlock => rjfBlock.rjf)
  .reduce((c, rjf) => [...c, ...rjf], [])
  .forEach(response => {
    const type = this.contentMappings[response.type]
    this.service.createComponent(response, type)
  })

Давайте разберем это:

  • .map собирает все rjf массивы в массив. На данный момент у нас есть массив массивов.
  • .reduce сглаживает массив, объединяя каждый массив в один массив. На данный момент у нас есть одноуровневый массив ответов.
  • .forEach - перебирает каждый ответ.

получаю эту ошибку this.sections.map is not a function, но при проверке this.sections показывает список массивов

stack s 06.03.2019 15:18

Другие вопросы по теме