我有以下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解决方案很好.
假设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)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |