我有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/
答案 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);