@justedoit

Как сформировать объект из повторяющих значений поля?

Есть массив объектов, у каждого объекта есть поле "code" которое у некоторых повторяется, необходимо сделать один объект из повторяющихся значений поля "code" и внутри объекта сделать массив всех повторяющих объектов с этим полем.

Пример исходного массива:
const data = [
    {
      id: 3547,
      code: "T5",
      name: "«Комплексная защита»",
      price: 17000,
      data: {
        period: "1 год",
        periodId: "000000001"
      }
    },
    {
      id: 3936,
      code: "T5",
      name: "«Комплексная защита»",
      price: 100000,
      data: {
        period: "10 лет",
        periodId: "000000010"
      }
    },
    {
      id: 3937,
      code: "T5",
      name: "«Комплексная защита»",
      price: 200000,
      data: {
        period: "20 лет",
        periodId: "000000020"
      }
    },
    {
      id: 3938,
      code: "T5",
      name: "«Комплексная защита»",
      description: "",
      price: 300000,
      data: {
        period: "30 лет",
        periodId: "000000030"
      }
    },
    {
      id: 3939,
      code: "T3R",
      name: "Услуга 2",
      description: null,
      price: 150000,
      data: {
        period: "10 лет",
        periodId: "000000010"
      }
    },
    {
      id: 3940,
      code: "T3R",
       name: "Услуга 2",
      description: null,
      price: 250000,
      data: {
        period: "20 лет",
        periodId: "000000020"
      }
    },
    {
      id: 3941,
      name: "Услуга 2",
      name: null,
      description: null,
      price: 350000,
      data: {
        period: "30 лет",
        periodId: "000000030"
      }
    },
    {
      id: 3942,
      code: "T13",
      name: "«Защита экрана»",
      description: "",
      price: 2400,
      data: {
        period: "3 месяца",
        periodId: "000000005"
      }
    },
    {
      id: 3943,
      code: "T13",
      name: "«Защита экрана»",
      description: "",
      price: 13450,
      data: {
        period: "6 месяцев",
        periodId: "000000006"
      }
    },
    {
      id: 3944,
      code: "T13",
      name: "«Защита экрана»",
      description: "",
      price: 22300,
      data: {
        period: "1 год",
        periodId: "000000001"
      }
    }
  ]


Результат:
{
    	code: 'T13',
      name: "«Защита экрана»",
      variants: [
      	{
          id: 3944,
          code: "T13",
          name: "«Защита экрана»",
          description: "",
          price: 22300,
          data: {
            period: "1 год",
            periodId: "000000001"
          }
        },
        {
          id: 3942,
          code: "T13",
          name: "«Защита экрана»",
          description: "",
          price: 2400,
          data: {
            period: "3 месяца",
            periodId: "000000005"
          }
        },
      ]
    },


Ну и соответственно остальные значения объекта с поле "code".
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Object.values(data.reduce((acc, n) => {
  (acc[n.code] ||= {
    code: n.code,
    name: n.name,
    variants: [],
  }).variants.push(n);

  return acc;
}, {}))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час