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

时间:2020-02-07 11:08:00

标签: javascript

我有2个对象:

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/

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

设法找到一种解决方法!

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

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

答案 2 :(得分:0)

您可以同时使用两种方式

使用传播算子:

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

使用较旧的javascript:

让returnTarget = Object.assign({},object1,object2);