【问题标题】:Merge array of objects into one object - objects have same name attributes [duplicate]将对象数组合并为一个对象-对象具有相同的名称属性[重复]
【发布时间】:2020-09-27 12:32:59
【问题描述】:

如何合并这些数据?

我有一个包含其他嵌套对象的 2 个对象的数组。

看起来像:

我需要几何和属性中的值在单个对象中而不是 2 中。

我试过了:

// first method:
console.log(arrObj.reduce(((r, c) => Object.assign(r, c)), {}));

console.log(Object.assign({}, ...arrObj));

// second method

const tltVehicles = gpsData.map((vehicle) => vehicle.geometry.coordinates);

const points = tltVehicles.map(([lng, lat]) => ({
    longitude: lng,
    latitude: lat,
  }));

const vehiclesProperties = gpsData.map((vehicle) => vehicle.properties);

const vehiclesData = Object.assign(points, vehiclesProperties);

这些似乎都不起作用。

理想情况下,我希望数据显示如下:

[
  {
  direction:   64,
  id:          3897,
  line:        63,
  type:        2,
  coordinates: [24.82993, 59.44876],
  }
]

有什么建议吗?

所以,有人结束了我的问题并提到了一个类似的问题。但是,我已经尝试过这些方法并在此处说明了这些方法。我已经说过的问题是,如果对象具有相同的名称属性,这将不起作用,第二个对象最终会覆盖第一个对象。

我还能尝试什么?

【问题讨论】:

  • 写入输入 JSON 而不是图像
  • 请将对象结构、代码、错误信息、标记等作为文本发布,而不是作为文本的图片。为什么:meta.stackoverflow.com/q/285551/157247
  • 类似这样的东西:在传播运算符的帮助下:{...result.properties, ...result.geometry}可以给你带来想要的结果。

标签: javascript reactjs ecmascript-6


【解决方案1】:

由于对象中的项目名称相同,上一个问题实际上与其他问题不同。

正如我已经提到的,展开运算符不起作用。

我放了一张图片,因为在我之前的帖子中,我因为从 JSON 响应中放入代码而被责骂,并被要求提供一张图片。

原来解决方案可以用 lodaash 完成,因为它进行了深度合并,而传统的 JS 只进行了浅合并。

  const tltVehicles = gpsData.map((vehicle) => vehicle.geometry.coordinates);
  const points = tltVehicles.map(([lng, lat]) => ({
    longitude: lng,
    latitude: lat,
  }));
  const vehiclesProperties = gpsData.map((vehicle) => vehicle.properties);
  const vehiclesData = _.merge(points, vehiclesProperties);

  console.log('result', vehiclesData);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2021-12-17
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多