javascript - 如何在 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);
推荐阅读
- ace-editor - 如何在 Ace Editor 的装订线中添加自定义错误?
- javascript - 将数组编号转换为与 HTML 类组合 #
- javascript - Javascript 代码未在 Wordpress 页面中运行
- shell - 递归展平根目录中的子目录并维护 1 级子目录结构
- python - 字符串索引必须是整数 - 从 Python 中的 REST API 获取 JSON 响应
- terraform - 如何将 Terraform 代码重构为模块?
- ios - 如何在 react-native 中重置 ios 库?
- php - 如何使用php检查php代码中是否存在某些字符串
- android - kotlin 中函数的上下文参数中的 this 与 this@activity_main
- php - 是否可以按特定元键的值过滤结果?