javascript - 如何使用 Node.JS 中的 2 个其他对象相减获得的数据创建动态对象?

标签 javascript node.js

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

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

例如,我有以下数据。

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
        },
}

这里,标签变量是完全动态的。即,如果只有一个变量可用,则只有一个数组 values 数组。有什么办法可以达到上面的结果吗?

最佳答案

你可以尝试这样的事情:

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
    }, {}))      
}

关于javascript - 如何使用 Node.JS 中的 2 个其他对象相减获得的数据创建动态对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60186868/

相关文章:

javascript - 在 typescript 中模块是个好主意吗?或者它们只是增加了复杂性?

javascript - 无法访问 ComponentDidMount 上的引用

node.js - 如何从 AWS Lambda ListFunctions API 获取与自己的过滤条件匹配的所需记录数?

node.js - 为什么我不能将 @bundled-es-modules/chai 别名为 chai?

javascript - CckEditor 与 jquery 表单冲突

javascript - 使用 ng-describe 与 Protractor 进行端到端测试

javascript - 修改obj javascript中的项目

android - 无法安装 react-native Nativebase : Execution failed for task ':app:compileDebugJavaWithJavac'

node.js - 使用 bat 文件运行 Node 服务器

angularjs - 不确定如何使用 meanjs 限制路由