我有2个JSON对象,定义如下:
const totalData = [{ Hostname: "abc123", name: "CName-A", Status: "PASS", Heading: "Not Applicable" },
{ Hostname: "abc123", name: "CName-B", Status: "FAIL", Heading: "Not Applicable" },
{ Hostname: "abc235", name: "CName-C", Status: "FAIL", Heading: "Not Applicable" },
{ Hostname: "abc235", name: "CName-D", Status: "FAIL", Heading: "Not Applicable" }];
const otherTotalData = [{ Hostname: "abc123", name: "QName-A", Status: "PASS", Heading: "HeadingQA" },
{ Hostname: "abc123", name: "QName-B", Status: "FAIL", Heading: "HeadingQB" },
{ Hostname: "abc235", name: "QName-C", Status: "FAIL", Heading: "Not Applicable" },
{ Hostname: "abc235", name: "QName-D", Status: "FAIL", Heading: "Not Applicable" }];
我有一个使用array reduce
方法的函数:
function createArray(totalData) {
const keyValues = ["Status", "Heading"],
result = Object.values(totalData.reduce((res, { Hostname, name, ...o }) => {
res[Hostname] = res[Hostname] || { Hostname };
keyValues.forEach(k => res[Hostname][name + k] = o[k]);
return res;
}, {}));
}
现在,我正在调用两个函数:
const Res1 = createArray(totalData);
const Res2 = createArray(otherTotalData);
这里Res1具有输出:
[
{
"Hostname": "abc123",
"CName-AStatus": "PASS",
"CName-BStatus": "FAIL"
},
{
"Hostname": "abc235",
"CName-CStatus": "FAIL",
"CName-DStatus": "FAIL"
}
]
并且,Res2具有输出:
[
{
"Hostname": "abc123",
"QName-AStatus": "PASS",
"QName-BStatus": "FAIL"
},
{
"Hostname": "abc235",
"QName-CStatus": "FAIL",
"QName-DStatus": "FAIL"
}
]
我想结合Res1和Res2,使最终的Json对象如下所示:
[
{
"Hostname": "abc123",
"CName-AStatus": "PASS",
"CName-BStatus": "FAIL",
"QName-AStatus": "PASS",
"QName-BStatus": "FAIL"
},
{
"Hostname": "abc235",
"CName-CStatus": "FAIL",
"CName-DStatus": "FAIL",
"QName-CStatus": "FAIL",
"QName-DStatus": "FAIL"
}
]
如何合并Res1
和Res2
?
基本上,您可以搜索具有共享属性HostyName的另一个数组,并使用Object.assign
将两个对象组合在一起。
const res1 = [{
"Hostname": "abc123",
"CName-AStatus": "PASS",
"CName-BStatus": "FAIL"
},
{
"Hostname": "abc235",
"CName-CStatus": "FAIL",
"CName-DStatus": "FAIL"
}
];
const res2 = [{
"Hostname": "abc123",
"QName-AStatus": "PASS",
"QName-BStatus": "FAIL"
},
{
"Hostname": "abc235",
"QName-CStatus": "FAIL",
"QName-DStatus": "FAIL"
}
];
const combined = res1.map(r => {
const other = res2.find(q => q["HostName"] === r["HostName"]);
return Object.assign({}, r, other);
});
console.log(combined);