繁体   English   中英

javascript JSON:两个或多个json的总和仅包含具有相同键的数字值

[英]javascript JSON : Sum two or more json having only numeric values with same keys

我是Nodejs和Typescript的新手,下面有两个json:

json1 = 
{
    "201809": 2,
    "metric": "headcount",
    "quarter1": 60,
    "careerLevelsGroups": [{
        "201809": 2,
        "quarter1": 60,
        "careerLevels": [{
                "201809": 2,
                "careerId": "careerId1",
                "quarter1": 60,
            },
            {
                "201809": 2,
                "careerId": "careerId2",
                "quarter1": 50,
            }
        ]
    }]
}

json2 = 
    {
        "201809": 3,
        "metric": "headcount",
        "quarter1": 100,
        "careerLevelsGroups": [{
            "201809": 7,
            "quarter1": 40,
            "careerLevels": [{
                    "201809": 9,
                    "careerId": "careerId1",
                    "quarter1": 30,
                },
                {
                    "201809": 8,
                    "careerId": "careerId2",
                    "quarter1": 30,
                }
            ]
        }]
    }

我想对与相同键关联的所有数值求和,并产生一个具有json1和json2的总和的json。

result = 
{
        "201809": 5,
        "metric": "headcount",
        "quarter1": 160,
        "careerLevelsGroups": [{
            "201809": 9,
            "quarter1": 100,
            "careerLevels": [{
                    "201809": 11,
                    "careerId": "careerId1",
                    "quarter1": 90,
                },
                {
                    "201809": 10,
                    "careerId": "careerId2",
                    "quarter1": 80,
                }
            ]
        }]
    }

我正在尝试使用循环,但是我有太多这样的元素需要总结,所以请您提出一个建议在Node.js中使用的更优化的方法

我整理了一个combine()函数,该函数使用递归来处理JSON对象的成员。 如果检测到"number"则将其合并。 如果检测到"object"则应用递归在其中搜索更多"number""object" 对于任何其他类型(例如"string" ),它仅保留值。

 function combine(acc, curr) { for (var key in acc) { switch (typeof(acc[key])) { case "number": acc[key] += curr[key]; break; case "object": combine(acc[key], curr[key]); break; } } } var json1 = { "201809": 2, "metric": "headcount", "quarter1": 60, "careerLevelsGroups": [{ "201809": 2, "quarter1": 60, "careerLevels": [{ "201809": 2, "careerId": "careerId1", "quarter1": 60, }, { "201809": 2, "careerId": "careerId2", "quarter1": 50, } ] }] }; var json2 = { "201809": 3, "metric": "headcount", "quarter1": 100, "careerLevelsGroups": [{ "201809": 7, "quarter1": 40, "careerLevels": [{ "201809": 9, "careerId": "careerId1", "quarter1": 30, }, { "201809": 8, "careerId": "careerId2", "quarter1": 30, } ] }] }; var res = json1; combine(res, json2); console.log(JSON.stringify(json1, undefined, 2)); 

运行脚本会产生所需的输出。 遍历一系列这些JSON对象以生成所需结果应该是一个简单的执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM