Javascript 使用ES6合并两个对象

Javascript 使用ES6合并两个对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我相信这个问题以前有人问过,但我找不到我想要的答案,所以这里是: 我有两个目标,如下所示: const response = { lat: -51.3303, lng: 0.39440 } let item = { id: 'qwenhee-9763ae-lenfya', address: '14-22 Elder St, London, E1 6BT, UK' } 我需要将这些合并在一起以形成: item = { id: 'qwenhee-9763ae-lenfya',

我相信这个问题以前有人问过,但我找不到我想要的答案,所以这里是:

我有两个目标,如下所示:

const response = {
  lat: -51.3303,
  lng: 0.39440
}

let item = {
  id: 'qwenhee-9763ae-lenfya',
  address: '14-22 Elder St, London, E1 6BT, UK'
}
我需要将这些合并在一起以形成:

item = {
  id: 'qwenhee-9763ae-lenfya',
  address: '14-22 Elder St, London, E1 6BT, UK',
  location: {
    lat: -51.3303,
    lng: 0.39440
  }
}
我知道我可以这样做:

item.location = {}
item.location.lat = response.lat
item.location.lng = response.lng
然而,我觉得这不再是最好的方法,因为ES6引入了很酷的分解/分配功能;我尝试了深度对象合并,但不幸的是它不受支持:(我也查看了一些ramda函数,但没有看到任何适用的


那么,使用ES6合并这两个对象的最佳方法是什么?

您可以使用
Object.assign()
将它们合并到一个新对象中:

const响应={
lat:-51.3303,
液化天然气:0.39440
}
常数项={
id:'qwenhee-9763ae-lenfya',
地址:英国伦敦埃尔德街14-22号,E1 6BT
}
const newItem=Object.assign({},item,{location:response});
console.log(newItem);
另一种方法是:

let result = { ...item, location : { ...response } }
但对象扩散并非如此


可能也会有帮助:

“ES6引入了很酷的解构/赋值功能”,这对合并对象属性毫无帮助。这样,响应将保存为指针而不是深度克隆。这应该是正确的答案
让结果={…项,位置:{…响应}
如果执行
const newItem={…item,location:response};
,请小心,因为
newItem
location
属性是对
response
对象的引用。最好像
const newItem={…item,location:{…response}};
这样做,以避免引用并确保安全。