Javascript 如何对对象执行减法';Node.JS中的数据是什么?
我有审查员的资料。它由当前和上个月的数据组成一个对象数组。现在我需要找到当前和上个月数据的差异,并将差异分配给上个月的数据对象 例如,我有以下数据Javascript 如何对对象执行减法';Node.JS中的数据是什么?,javascript,node.js,Javascript,Node.js,我有审查员的资料。它由当前和上个月的数据组成一个对象数组。现在我需要找到当前和上个月数据的差异,并将差异分配给上个月的数据对象 例如,我有以下数据 deviceData = [ { "_id": "sb-0001", "heat": 100, "humidity": 200, "time": "This Month" }, { "
deviceData = [
{
"_id": "sb-0001",
"heat": 100,
"humidity": 200,
"time": "This Month"
},
{
"_id": "a-1",
"heat": 60,
"humidity": 40,
"time": "This Month"
},
{
"_id": "a-1",
"heat": 20,
"humidity": 10,
"time": "Last Month"
},
{
"_id": "sb-0001",
"heat": 20,
"humidity": 30,
"time": "Last Month"
}
]
现在我想找出如下的区别
deviceData = [
{
"_id": "sb-0001",
"heat": 100,
"humidity": 200,
"time": "This Month"
},
{
"_id": "a-1",
"heat": 60,
"humidity": 40,
"time": "This Month"
},
{
"_id": "a-1",
"heat": 20,
"humidity": 10,
"time": "Last Month",
"diff_heat":40,
"diff_humidity":30
},
{
"_id": "sb-0001",
"heat": 20,
"humidity": 30,
"time": "Last Month",
"diff_heat":80,
"diff_humidity":170
}
]
我尝试了以下代码来计算差异,但没有得到
let difference;
difference = [templateData.reduce((obj, n) => {
for (var prop in n) {
if (obj.hasOwnProperty(prop) && obj['time']==n['time']) obj[prop] -= n[prop];
else obj[prop] = n[prop];
}
return obj;
}, {})]
还有其他方法吗?这段代码应该按照您的意愿执行,我们创建上个月数据的映射,然后在数组中循环并从当前月份中减去 我通过循环对象的属性并减去它们是否是数字,使这一点更加通用
const deviceData=[{{{u id:“sb-0001”,“heat”:100,“湿度”:200,“time:“This Month”},{{u id:“a-1”,“heat”:60,“湿度”:40,“time:“This Month”},{u id:“a-1”,“heat”:20,“湿度”:10,“time:“Last Month”},{u id:“sb-0001”,“heat”:20,“湿度”:30,“time:“Last Month”};
让lastMonthData=deviceData.reduce((acc,el)=>{
如果(el.time==“上个月”){
acc[el.\U id]=el;
}
返回acc;
}, {});
让结果=设备数据减少((acc,el)=>{
如果(el.time==“本月”&&lastMonthData[el.\U id]){
Object.entries(el.forEach)([key,val])=>{
if(Number.isFinite(lastMonthData[el.\u id][key])){
lastMonthData[el._id][key+“_diff”]=val-lastMonthData[el._id][key];
}
});
}
加速推力(el);
返回acc;
}, []);
日志(“结果:”,结果)代码>非常感谢@Terry Lennox。但我有一点怀疑。如何创建动态属性?如果两个月内只有热量
,我只需要创建差异热量
,如果有温度
,我应该在结果中创建差异温度
。这完全是动态的。有可能吗?Hi@Aravind,当然,在JavaScript中,我们可以使用括号符号动态创建属性(“