Слияние и объединение JavaScript при одинаковом идентификаторе в одном массиве объектов

#javascript #typescript #ecmascript-6

#javascript #typescript #ecmascript-6

Вопрос:

Мои данные:

 [
  {
    "id": "ewq123",
    "name": "Joshua",
    "order": "Pizza"
  },
  {
    "id": "ewq123",
    "name": "Joshua",
    "order": "Burger"
  },
  {
    "id": "a512dsa",
    "name": "Eugene",
    "order": "Pizza"
  },
]
 

Я хочу, чтобы в итоге получилось что-то вроде:

 [
 {
   "id": "ewq123",
   "name": "Joshua",
   "order": ["Burger", "Pizza"]
 },
 {
   "id": "a512dsa",
   "name": "Eugene",
   "order": "Pizza"
 },
]
 

Есть ли лучший способ использовать функции ES6? как оператор распространения

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

1. «Есть ли лучший способ использовать функции ES6″, лучше, чем что именно? У вас есть какой-то код, который вы пытаетесь улучшить?

Ответ №1:

Попробуйте приведенный ниже код, чтобы получить тот же результат :

 var originalArray = [{
        "id": "ewq123",
        "name": "Joshua",
        "order": "Pizza"
    },
    {
        "id": "ewq123",
        "name": "Joshua",
        "order": "Burger"
    },
    {
        "id": "a512dsa",
        "name": "Eugene",
        "order": "Pizza"
    },
];
var arrayHashmap3 = originalArray.reduce((obj, item) => {

    if (obj[item.id]) {
        obj[item.id].order.push(item.order)
    } else {
        item.order = [item.order]
        obj[item.id] = {
            ...item
        }
    }
    return obj;
}, {});

var mergedArray3 = Object.values(arrayHashmap3);

console.log(mergedArray3);
 

Вывод :

 [
 {
   "id": "ewq123",
   "name": "Joshua",
   "order": ["Burger", "Pizza"]
 },
 {
   "id": "a512dsa",
   "name": "Eugene",
   "order": "Pizza"
 },
]