如何从JSON中总结数字?

use*_*620 3 javascript jquery

我有以下JSON示例.我想总结一下'numberOfPoint'相应'Name'的得分总数.在这种情况下,名称A具有点6的总数,名称B具有点2的总数,并且名称C具有点2的总数.

{ "data": [
    {
        "id": {
            "year": 2015,
            "Name": "A"
        },
        "numberOfPoint": 2
    },
    {
        "id": {
            "year": 2014,
            "Name": "A"
        },
        "numberOfPoint": 2
    },
    {
        "id": {
            "year": 2014,
            "Name": "B"
        },
        "numberOfPoint": 2
    },
    {
        "id": {
            "year": 2014,
            "Name": "C"
        },
        "numberOfPoint": 2
    },
    {
        "id": {
            "year": 2013,
            "Name": "A"
        },
        "numberOfPoint": 2
    }]
}
Run Code Online (Sandbox Code Playgroud)

我如何总结numberOfPoint每个名字?纯JavaScript或jQuery解决方案很好.

Dow*_*oat 5

假设obj是您的JSON,以下解决方案应该可以正常工作.

var result = {};

obj.data.forEach(function (a) { result[a["id"]["Name"]] = (result[a["id"]["Name"]] || 0) + a["numberOfPoint"]; });
Run Code Online (Sandbox Code Playgroud)

result是值存储的地方.result将看起来像:

{
    "A": 6,
    "B": 2,
    "C": 2
}
Run Code Online (Sandbox Code Playgroud)

说明

一旦你能够"反混淆它",这很简单.首先result定义object().然后我们遍历所有项目obj.data.接下来我们发现name与项目相关联,我们将其作为我们的关键.然后我们使用OR简写来查看它是否被定义为,如果没有,则将其设置为零.最后,添加值.这是重复的.

更新

使用.reduce看起来更好的这种东西:

obj.data.reduce(function (b,a) { return (b["id"]["Name"]] = (b[a["id"]["Name"]] || 0) + a["numberOfPoint"]) },{});
Run Code Online (Sandbox Code Playgroud)