Javascript 如何比较两个数组并添加新属性和值
我想做的是根据dateStart比较两个数组,例如2020-10-09 04:40:01,然后在另一个数组中没有2020-10-09 04:40:01。 它将添加这样的对象Javascript 如何比较两个数组并添加新属性和值,javascript,typescript,Javascript,Typescript,我想做的是根据dateStart比较两个数组,例如2020-10-09 04:40:01,然后在另一个数组中没有2020-10-09 04:40:01。 它将添加这样的对象 data = [ { 'server': 'Network 1', 'data': [ { dateStart: "2020-09-20 05:40:01" } ] }, { '
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,它应该添加一个对象,就像第一个数组有一个dateStart:2020-10-09 04:40:01一样,然后在第二个数组没有dateStart时,它应该添加一个新对象。如果第一个数组没有dateStart:2020-10-09 04:40:01,那么第二个数组有dateStart:2020-10-09 04:40:01,那么它将在第一个数组上添加新对象
下面是示例:最简单的直接方法是为每个循环使用
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"
}
]
}
]
数据数组中的其他元素也是如此,但我将把这个循环留给您编写
编辑:动态版本,支持数据数组中的2项以上
// 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
}
}
})
你所说的动态是什么意思?如何制作DynamicClike?例如,有一个新的服务器,它是Server3,它也有一个数据。你可以添加一个嵌套的循环来循环数据数组中的所有元素
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
})
}
})
})
})