javascript - 比较同一数组的当前版本和以前版本,以了解 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:无法读取未定义的属性“状态”
我该怎么做?
解决方案
首先,您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');
}
}
}
推荐阅读
- html - 滚动时保持在顶部的凹头
- c# - 极端优化库中的 Newton-Raphson
- java - JComboBox更改下拉箭头图像不起作用
- vb.net - 拆分字符串包括空格
- java - 使用 PostgreSQL 的休眠 ORM - 无法确定合适的驱动程序类
- python - 考虑python中的键/列顺序计算字典和数据框之间的匹配值
- sql - 如何修复元数据库中的“缺少表的 FROM 子句条目”错误
- vba - Prompt for verifying recipients
- matrix - 如何进行 4 维旋转?
- spring - 在应用程序上下文中将 Spring Boot 2.1.9 碰撞到 2.2.0 没有 AuthenticationManager