首页 > 解决方案 > 比较同一数组的当前版本和以前版本,以了解 javascript 中值的变化

问题描述

我有以下数据数组:

[{"name":"joseph","time":"0","status":"Idle"}] //there are multiple objects inside the array

这个对象数组由节点 js 服务每秒生成一次。我想将新创建的数组与之前创建的数组进行比较,以检查状态的变化。

例如

情况1

newly created 
[{"name":"joseph","time":"0","status":"Idle"}]

previously created
[{"name":"joseph","time":"0","status":"Idle"}]

比较新对象和前一个对象的状态:状态没有变化

案例2

newly created 
[{"name":"joseph","time":"0","status":"Calling"}]

previously created

[{"name":"joseph","time":"0","status":"Idle"}]

比较新对象和先前对象的状态:状态已更改

我希望你明白这一点。如果状态已更改,则将当前时间分配给时间键;我无法弄清楚如何保存以前的数组并将其与新创建的数组进行比较。

到目前为止我做了什么:

newarray = [{"name":"joseph","time":"0","status":"Calling"}];
previousarray = newarray;
for(i=0;i<=newarray.length;i++){
  for(j=0;j<previousarray.length;j++){
if(previousarray[j].status != newarray[i].status){

  newarray[i].time = moment().format('H:mm:ss');
}
  }
}

但这不起作用。我收到如下错误:TypeError:无法读取未定义的属性“状态”

我该怎么做?

标签: javascriptarraysnode.js

解决方案


首先,您previousArray是对newArray使用的参考=

请改用扩展运算符语法:

const previousArray = [...newArray];

然后在第一个循环中你有<=而不是<

const newarray = [{"name":"joseph","time":"0","status":"Calling"}];
const previousarray = [...newarray];

for(let i = 0; i < newarray.length; i++) {
  for(let j = 0; j < previousarray.length; j++) {
    if(previousarray[j].status != newarray[i].status) {
       newarray[i].time = moment().format('H:mm:ss');
    }
  }
}


推荐阅读