
[英]How to compare two array of object and if value are same add new key: value on second object in Javascript
[英]How to compare the two array and add new property and value
data = [
{
'server': 'Network 1',
'data': [
{
dateStart: "2020-09-20 05:40:01"
}
]
},
{
'server': 'Network 2',
'data': [
{
download: 12,
dateStart: "2020-09-20 05:40:01"
},
{
download: 12,
dateStart: "2020-09-20 05:50:01"
},
{
download: 12,
dateStart: "2020-09-20 06:00:01"
},
{
download: 12,
dateStart: "2020-09-20 06:10:01"
}
]}
]
我想要做的是根据 dateStart 比较两个数组,例如 2020-10-09 04:40:01,然后在其他数组中没有 2020-10-09 04:40:01。 它会像这样添加 object。
data = [
{
'server': 'Network 1',
'data': [
{
download: 12,
dateStart: "2020-09-20 05:40:01"
},
{
download: 0,
dateStart: "2020-09-20 05:50:01"
},
{
download: 0,
dateStart: "2020-09-20 06:00:01"
},
{
download: 0,
dateStart: "2020-09-20 06:10:01"
}
]
},
{
'server': 'Network 1',
'data': [
{
download: 12,
dateStart: "2020-09-20 05:40:01"
},
{
download: 12,
dateStart: "2020-09-20 05:50:01"
},
{
download: 12,
dateStart: "2020-09-20 06:00:01"
},
{
download: 12,
dateStart: "2020-09-20 06:10:01"
}
]
}
]
如果数组不等于 dateStart 它应该添加一个 object 就像第一个数组有一个“dateStart”:“2020-10-09 04:40:01” 然后在第二个数组中没有那么它应该添加新的object。如果第一个没有“dateStart”:“2020-10-09 04:40:01”,那么第二个有“dateStart”:“2020-10-09 04:40:01”,然后在第一个数组上将添加新的 object。
这是示例: https://stackblitz.com/edit/angular-eqgn2w?file=src/app/app.component.ts
最简单直接的方法是为每个循环使用一个
// for each element in data[0], search a match in data[1]
// if there is no matching data in data[1], push the corresponding element to data[1]
data[0].forEach(d => {
// search for a match in data[1]
match = data[1].find(element => element.dateStart === d.dateStart)
if (match.length === 0) { // if there is not a match
data[1].push({
"server": "Network 2",
"ping": "0 ms",
"dl": "0 Mbit/s",
"ul": "0 Mbit/s",
"ispcon": false,
"dateStart": d.dateStart,
"dateEnd": d.dateEnd
}
}
})
数据数组中的其他元素也是如此,但我将把该循环留给您编写。
编辑:支持数据数组中超过 2 个项目的动态版本
data.forEach(d => {
d.data.forEach(record => {
// search for a match in each of the other item
data.forEach(d2 => {
sameExist = d2.data.find(element => element.dateStart == record.dateStart)
if (!sameExist) {
d2.data.push({
"server": d2.server,
"dateStart": record.dateStart
})
}
})
})
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.