Как обойти массив объектов и объеденить совпадающие ключи

Рейтинг: 0Ответов: 1Опубликовано: 26.01.2023

Как привести такой массив:

 const arr = [
    {
      type: "t",
      position: {
        lg: { x: 0 },
        md: { x: 1 },
      },
    },
    {
      type: "w",
      position: {
        md: { x: 2 },
      },
    },
    {
      type: "t",
      position: {
        lg: { x: 3 },
      },
    },
  ];

К объекту вида:

{
  lg: [
    { x: 0 },
    { x: 3 }
  ],
   md: [
    { x: 1 },
    { x: 2 }
  ]
}

Подойдtn любой вариант: lodash, рекурсия

Ответы

▲ 0

lodash, рекурсия

Это все не обязательно. Достаточно пары циклов...

const arr = [{
    type: "t",
    position: {
      lg: {
        x: 0
      },
      md: {
        x: 1
      },
    },
  },
  {
    type: "w",
    position: {
      md: {
        x: 2
      },
    },
  },
  {
    type: "t",
    position: {
      lg: {
        x: 3
      },
    },
  },
];

const obj = arr.reduce((o, v) => {
  ['lg', 'md'].forEach(k => v.position[k] && o[k].push(v.position[k]))
  return o
}, {
  lg: [],
  md: []
})

console.log(obj)