Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较两个数组并添加新属性和值_Javascript_Typescript - Fatal编程技术网

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

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" } ] }, { '

我想做的是根据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"
        }
      ]
    },
    {
      '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
                })
            }
        })
    })
})