将两个对象与 ES6 合并

2022-08-30 05:12:08

我确信这个问题以前被问过,但我无法完全找到我正在寻找的答案,所以这里是:

我有两个对象,如下所示:

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合并这两个对象的最佳方法是什么?


答案 1

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

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 的第 4 阶段建议:

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

答案 2

另一个问题是:

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

但对象传播尚未标准化

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