将两个对象与 ES6合并

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

我有两个目标,如下:

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
}
}

I know I could do it like this:

item.location = {}
item.location.lat = response.lat
item.location.lng = response.lng

然而,我觉得这不再是最好的方法,因为 ES6引入了很酷的解构/赋值的东西; 我尝试了深度对象合并,但不幸的是它不支持: (我也看了一些 Ramda 函数,但看不到任何适用的东西。

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

152876 次浏览

You can use Object.assign() to merge them into a new object:

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


const item = {
id: 'qwenhee-9763ae-lenfya',
address: '14-22 Elder St, London, E1 6BT, UK'
}


const newItem = Object.assign({}, item, { location: response });


console.log(newItem );

你也可以使用 物体扩散,这是 ECMAScript 的第四阶段建议:

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


const item = {
id: 'qwenhee-9763ae-lenfya',
address: '14-22 Elder St, London, E1 6BT, UK'
}


const newItem = { ...item, location: response }; // or { ...response } if you want to clone response as well


console.log(newItem );

另一种方法是:

let result = { ...item, location : { ...response } }

但是对象传播不是 yet standardized

可能也有帮助: https://stackoverflow.com/a/32926019/5341953