javascript - 比较同一数组的当前版本和先前版本以了解 JavaScript 中值的变化

标签 javascript arrays node.js

我有以下数据数组:

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

该对象数组由 Node 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');
}
  }
}

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

我该怎么做?

最佳答案

首先是你的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');
    }
  }
}

关于javascript - 比较同一数组的当前版本和先前版本以了解 JavaScript 中值的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53514257/

相关文章:

javascript - 如何在调整大小时触发我的 jQuery 并检测宽度

javascript - 检查项目是否存在于数组 React 中

java - 如何创建包含 ArrayLists 的二维数组?

javascript - 当模块在本地注册表域中发布时,如何安装 npm 依赖模块?

JavaScript 闭包 - 除了手动重置内部变量之外,还有其他选择吗?

javascript - 通过 Javascript 或 Jquery 在客户端格式化 JSON Datetime

javascript - 对象、数组或类数组对象

node.js - GruntJS/NPM package.json : installing from local?

node.js - 如何在appfog中的node.js中保持套接字处于事件状态

java - 语法错误: Unexpected token ILLEGAL in Node Javascript