繁体   English   中英

如何比较两个数组并添加新的属性和值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM