繁体   English   中英

如何将这 2 个对象合并为 1 个?

[英]How can I merge these 2 objects into 1?

我有两个对象:

var set1 = {
    name: "2020-02-17T00:00:00",
    series: [
        { key: "055", value: 1154.47},
        { key: "056", value: 4132.2},
        { key: "059", value: 1825.33}
    ]
}

var set2 = {
    startdate: "2020-02-17T00:00:00",
    series: [
        {key: "005",value: 0},
        {key: "055",value: 0},
        {key: "056",value: 0},
        {key: "059",value: 0},
        {key: "042",value: 0},
        {key: "M002",value: 0}
    ]
}

如何在不覆盖任何值为 0 的键的情况下将 set1 的值推送到 set2 上:

var set2 = {
    startdate: "2020-02-17T00:00:00",
    series: [
        {key: "005", value: 0},
        {key: "055", value: 1154.47},
        {key: "056", value: 4132.2},
        {key: "059", value: 1825.33},
        {key: "042", value: 0},
        {key: "M002", value: 0}
    ]
}

相关代码,可以看这里: https : //jsfiddle.net/xLr8qoes/1/

set2.series = [ ...set2.series, ...set1.series ];

这会将 set2 系列设置为

[
  {
    "key": "005",
    "value": 0
  },
  {
    "key": "055",
    "value": 0
  },
  {
    "key": "056",
    "value": 0
  },
  {
    "key": "059",
    "value": 0
  },
  {
    "key": "042",
    "value": 0
  },
  {
    "key": "M002",
    "value": 0
  },
  {
    "key": "055",
    "value": 1154.47
  },
  {
    "key": "056",
    "value": 4132.2
  },
  {
    "key": "059",
    "value": 1825.33
  },
  {
    "key": "055",
    "value": 1154.47
  },
  {
    "key": "056",
    "value": 4132.2
  },
  {
    "key": "059",
    "value": 1825.33
  }
]

终于想出办法了!

set2.series.forEach(element => {
    if (set1.series.filter(e => e.key == element.key).length >= 1){
        element.value = set1.series.filter(e => e.key == element.key)[0].value;
    }
    else element.value = 0;
})

对于 set2.series 中的每个对象,它根据匹配的键过滤 set1.series。 过滤器返回一个数组,因此如果数组的长度 > 0,则该键/值对存在于 set1 中。

set2 = {
    "startdate": "2020-02-17T00:00:00",
    "series": [
        {key: "005", value: 0}, 
        {key: "042", value: 0}, 
        {key: "055", value: 1154.47}, 
        {key: "056", value: 4132.2}, 
        {key: "059", value: 1825.33}, 
        {key: "M002", value: 0}
    ]
}

有比这更好/更简单的方法吗?

你可以通过两种方式做到这一点

使用扩展运算符:

让 object3=[...object1,...object2]

使用较旧的 javascript:

让返回目标 = Object.assign({},object1, object2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM