简体   繁体   中英

JavaScript merge and join if same ID in one array of objects

My Data:

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

I want to be able to end up with something like:

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

Is there a better way to use ES6 functions? like spread operator

Try Below code to acheive the same output:

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);

Output:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM