@kot98

Как изменить объект?

В ответе запроса получаю объект
{
....
 orders: {
     tools: [
         {
            tool1: 't1'
          }
     ],
     wood: [
         {
            wood1: 'w1',
          }
     ],
   },
...
}

нужно сделать в orders один массив из двух, и каждому элементу массива добавить поле type: Название массива (например: {tool1: 't1', type: 'tools'})
Что делаю я:
desktopData.value = response.data.data

      desktopData.value?.orders.tools.forEach((item) => (item.type = 'tools'))

      desktopData.value?.orders.wood.forEach((item) => (item.type = 'wood'))

      desktopData.value.orders = desktopData.value?.orders.tools.concat(
        desktopData.value?.orders.wood,
      )

но в итоге не выводится desktopData.value.orders
в чем ошибка и может есть решение получше?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Как я уже написал, код рабочий. Но его можно немного улучшить:
var o = {
    value: {
        orders: {
            tools: [
                {
                    tool1: 't1'
                }
            ],
            wood: [
                {
                    wood1: 'w1',
                }
            ],
        },
    }
}

var allOrders = [];
var ordersByType = o.value?.orders || {};

Object.keys(ordersByType).forEach((type) => {
    ordersByType[type].forEach((order) => {
        allOrders.push({
            ...order,
            type,
        });
    });
});

o.value.orders = allOrders;


Можно использовать и reduce, чтобы сэкономить пару строк, но многие (и я в их числе) считают, что использование этого метода сильно ухудшает читаемость кода.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы