#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(...)
)