-2

Just wondering what is my best approach to merge these two arrays together.

example

var a = [{"ID":11021,"ASSET_NAME":"panda","SERVICE_NAME":"Open Ticket"}]
var b = [{"ID":11021,"ASSET_NAME":"panda","SERVICE_NAME":"open requests"}]

Looking to merge them into:

var c = ["ID":11021, ASSET_NAME:"panda", service_name: ['open requests','open tickets']]

any help would be great.

Thanks

user3292394
  • 609
  • 2
  • 11
  • 24

2 Answers2

1

You can use one object to store ID's and reduce() to create new array of merged objects.

var a = [{"ID":11021,"ASSET_NAME":"panda","SERVICE_NAME":"Open Ticket"}]
var b = [{"ID":11021,"ASSET_NAME":"panda","SERVICE_NAME":"open requests"}]
var obj = {}

var result = a.concat(b).reduce(function(r, e) {
  if (!obj[e.ID]) {
    obj[e.ID] = {
      ID: e.ID,
      ASSET_NAME: e.ASSET_NAME,
      service_name: []
    }
    r.push(obj[e.ID])
  }
  obj[e.ID].service_name.push(e.SERVICE_NAME)
  return r
}, [])

console.log(JSON.stringify(result, 0, 4))
Nenad Vracar
  • 118,580
  • 15
  • 151
  • 176
0

You can utilize the map method of arrays, like so:

var a = [{'eprid':112}, {'asset_name':'panda'}, {'service_name': 'open tickets'}];
var b = [{'eprid':112}, {'asset_name':'panda'}, {'service_name': 'open requests'}];
var c = a.map((obj, i) => {
    for (key in obj) {
    if(obj[key] !== b[i][key]) {
        obj[key] = [obj[key], b[i][key]]
    }
    return obj;
  }
})

console.log(c) // [{'eprid':112}, {'asset_name':'panda'}, {'service_name': ['open ticket', 'open requests']}]
Joe Lissner
  • 2,181
  • 1
  • 15
  • 21