如何在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)

拆分 reducer 在 redux 中对同一片数据进行操作

在 Node.js 中对数组中的相似字符串进行分组

如何在 C# 中对数组执行集合减法?