Array.map возвращает неопределенный массив

#javascript #arrays #angular #typescript

#javascript #массивы #угловой #typescript

Вопрос:

Я пытаюсь сопоставить свой массив объектов и переназначить эти объекты в новый массив объектов с другой структурой.

Итак, я создал следующую функцию в своем сервисе

   getArticoli(): any {
    let articoli = [];
    return articoli = this.carrello.plu.map(plu => {
      const varianti = [];
      if (plu.varianti) {
      plu.varianti.map(variante => varianti.push(new VariantiArticoli(variante.id, variante.stato)));
      }
      articoli.push(new Articoli('PLUREP', plu.id, plu.qta, varianti));
    });
  }
  

Функция не возвращает никакой ошибки, и при отладке articoli фактически заполняется всеми элементами, но когда я вызываю эту функцию в своем компоненте и печатаю результат в журнале консоли, я получаю массив из n объектов из исходного массива, но для его тела установлено значение undefined…

Итак, если при отладке у меня есть артиколи из двух объектов в журнале консоли, я получу массив из 2 объектов, установленных как неопределенные..

Первый массив из 5 console.log(articoli) установлен внутри карты, второй является фактическим вызовом getArticoli()

 console.log(this.articoli());
  

введите описание изображения здесь

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

1. Обратный вызов для .map() должен возвращать новое значение. Ваш ничего не возвращает -> undefined

2. Почему есть articoli.push() в .map() обратном вызове? Содержимое articoli в любом случае впоследствии перезаписывается результатом .map()

3. @Andreas я делаю, articoli.push поскольку carrello.plu имеет одну структуру объекта, и я должен преобразовать ее в другую, используя некоторые данные в carrello.plu .. на этом этапе я должен использовать только foreach ?

4. Не используйте просто другую функцию… Прочитайте документацию для .map() и стрелочных функций (неявных return ). Если вас не интересует возвращаемое значение, .map() то .map() это неправильный инструмент.

5. @JavaScript Когда функция arrow состоит только из выражения, тогда существует неявное return значение, но здесь это не так (по крайней мере, не в соответствующей части this.carrello.plu.map(...) )