2
var obj1 = {name: “John”, hobby: “Football”}

var obj2 = {hobby: “Basketball”}

These are my two object. I want to merge them and my result will be

   var obj1 = {name: “John”, hobby :[“Foootbal”,”Basketball”]}

How can ı do this ?

buzatto
  • 9,704
  • 5
  • 24
  • 33
Mustafa Uysal
  • 173
  • 2
  • 5
  • 3
    Does this answer your question? [Merge javascript objects in array with same key](https://stackoverflow.com/questions/33850412/merge-javascript-objects-in-array-with-same-key) – Zac Anger Jan 15 '21 at 19:12
  • 1
    This doesn't looks like a merge. We could consider a merge if both `obj1` and `obj2` are strictly the type. In this case, you could **reduce** it in a new type – Jan Cássio Jan 15 '21 at 19:13

2 Answers2

4

var obj1 = {name: "John", hobby: "Football"}

var obj2 = {hobby: "Basketball"}
var obj3 = {hobby: "Tennis"}

const merge = (obj1, obj2) => {
    Object.keys(obj1).forEach(key => { if (obj2[key]) obj1[key] = [...[obj1[key]], obj2[key]].flat() })
}

merge(obj1, obj2)
merge(obj1, obj3)

console.log(obj1)
ecoplaneteer
  • 1,918
  • 1
  • 8
  • 29
0

const obj1 = {name: "John", hobby: "Football"}

const obj2 = {hobby: "Basketball"}

const obj3 = {}
for (const key in obj1){
  if (obj2[key] === undefined){
    obj3[key] = obj1[key]    
  }else{    
    obj3[key] = [ obj1[key], obj2[key] ]
  }
}
console.log(obj3)

Slightly different solution. Does not alter original objects.

Trevor
  • 2,792
  • 1
  • 30
  • 43