如何在Node.JS中对对象的数据进行减法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Node.JS中对对象的数据进行减法?相关的知识,希望对你有一定的参考价值。
我有检查员的数据。它包含当前和上个月的数据作为对象数组。现在,我需要查找当前和上个月数据的差异,并将差异分配给上个月的数据对象。
例如,我有以下数据。
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 = [ { "_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" } ];
let lastMonthData = deviceData.reduce((acc, el) => {
if (el.time === "Last Month") {
acc[el._id] = el;
}
return acc;
}, {});
let result = deviceData.reduce((acc, el) => {
if (el.time === "This Month" && lastMonthData[el._id]) {
Object.entries(el).forEach(([key,val]) => {
if (Number.isFinite(lastMonthData[el._id][key])) {
lastMonthData[el._id][key + "_diff"] = val - lastMonthData[el._id][key];
}
});
}
acc.push(el);
return acc;
}, []);
console.log("Result:", result);
以上是关于如何在Node.JS中对对象的数据进行减法?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js使用MySQL数据库中对RowDataPacket对象的使用
如何在 MongoDB 中对聚合查询结果进行分页并获得总文档数(Node.js + Mongoose)?
如何在 mongodb javascript 中对数据库数据进行排序? (节点.js)