首页 > 解决方案 > 如何使用从 Node.JS 中减去 2 个其他对象获得的数据创建动态对象?

问题描述

我有一个用例,我需要使用当前和上个月(或季度或周)的数据以及它们之间的差异来生成对象。

我已经掌握了全部数据。但是我对如何在对象值之间执行减法并使用它的结果创建一个新对象感到困惑。

例如,我有以下数据。

data = {
        "variables": [
            "heat",
            "humidity"
        ],
        "lables": [
            "February",
            "January",
            "December",
            "November",
            "October",
            "September"
        ],
        "values": [
            [
                300,
                40,
                0,
                7000,
                250,
                150
            ],
            [
                400,
                10,
                0,
                8000,
                150,
                50
            ]
        ]
}

现在我想生成以下对象。

result= {
        "variables": [
            "heat",
            "humidity"
        ],
        "lables": [
            "February",
            "January",
            "December",
            "November",
            "October",
            "September"
        ],
        "values": [
            [
                300,
                40,
                0,
                7000,
                250,
                150
            ],
            [
                400,
                10,
                0,
                8000,
                150,
                50
            ]
        ],
        "current":{
             "_id":"February",
             "heat":300,
             "humidity":400
        },
        "previous":{
             "_id":"January",
             "heat":40,
             "humidity":10
        },
        "difference":{
             "heat":260,
             "humidity":390
        },
}

在这里,lablesvariables是完全动态的。即,如果只有一个变量可用,则只有一个数组values数组。有没有办法达到上述结果?

标签: javascriptnode.js

解决方案


你可以尝试这样的事情:

data.current = {
    _id: data.lables[0],
    ...(data.variables.reduce((obj, variableName, variableIndex) => {
        obj[variableName] = data.values[variableIndex][0]
        return obj
    }, {})
} 
data.previous = {
    _id: data.lables[1],
    ...(data.variables.reduce((obj, variableName, variableIndex) => {
        obj[variableName] = data.values[variableIndex][1]
        return obj
    }, {}))
}
data.difference = {
  ...(data.variables.reduce((obj, variableName, variableIndex) => {
        obj[variableName] = data.current[variableName] - data.previous[variableName]
        return obj
    }, {}))      
}

推荐阅读