Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 如何对对象执行减法';Node.JS中的数据是什么?_Javascript_Node.js - Fatal编程技术网

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中,我们可以使用括号符号动态创建属性(“