考虑下面的这个JSON对象:
{
"cells":[
{
"count":"1",
"gdp_growth__avg":1.90575802503285,
"geo__name":"united states of america",
"time":1990
},
{
"count":"1",
"gdp_growth__avg":9.17893670154459,
"geo__name":"china",
"time":1991
},
{
"count":"1",
"gdp_growth__avg":-5.04693945214571,
"geo__name":"russia",
"time":1991
},
{
"count":"1",
"gdp_growth__avg":-0.0622142217811472,
"geo__name":"botswana",
"time":1991
},
{
"count":"1",
"gdp_growth__avg":14.2407063986337,
"geo__name":"china",
"time":1992
},
{
"count":"1",
"gdp_growth__avg":-14.5310737731921,
"geo__name":"russia",
"time":1992
},
{
"count":"1",
"gdp_growth__avg":3.55494453739944,
"geo__name":"united states of america",
"time":1992
},
{
"count":"1",
"gdp_growth__avg":13.9643147001603,
"geo__name":"china",
"time":1993
},
{
"count":"1",
"gdp_growth__avg":-8.66854034194856,
"geo__name":"botswana",
"time":1993
},
{
"count":"1",
"gdp_growth__avg":2.74204850437989,
"geo__name":"united states of america",
"time":1993
},
{
"count":"1",
"gdp_growth__avg":4.04272516401846,
"geo__name":"united states of america",
"time":1994
},
{
"count":"1",
"gdp_growth__avg":13.0806818010789,
"geo__name":"china",
"time":1994
},
{
"count":"1",
"gdp_growth__avg":-12.5697559787493,
"geo__name":"russia",
"time":1994
},
{
"count":"1",
"gdp_growth__avg":10.9249803004994,
"geo__name":"china",
"time":1995
},
{
"count":"1",
"gdp_growth__avg":-4.14352840666389,
"geo__name":"russia",
"time":1995
},
{
"count":"1",
"gdp_growth__avg":2.71655384149574,
"geo__name":"united states of america",
"time":1995
},
{
"count":"1",
"gdp_growth__avg":10.0085233990531,
"geo__name":"china",
"time":1996
},
{
"count":"1",
"gdp_growth__avg":3.79848988541973,
"geo__name":"united states of america",
"time":1996
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想Map和Reduce并生成一个新对象,其中包含上述JSON中所有国家的GDP增长总和,可能看起来大致如下:
{
{
"gdp_growth__avg":46.23,
"geo__name":"united states of america",
},
{
"gdp_growth__avg":16.23,
"geo__name":"china",
},
{
"gdp_growth__avg":36.23,
"geo__name":"russia",
},
{
"gdp_growth__avg":26.23,
"geo__name":"botswana",
"time":1991
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这样的事情可能会朝着正确的方向发展,但似乎没有做到我所期待的:
var arr = [{x:1},{x:2},{x:4}];
arr.reduce(function (a, b) {
return {x: a.x + b.x};
});
console.log(arr); //Outputs that same initial array
Run Code Online (Sandbox Code Playgroud)
虽然我认识到在服务器端执行此操作可能更好更容易,但我想知道我尝试做什么可以在客户端使用JavaScript完成.有什么建议?提前致谢.
尝试这个:
var data = { cells:[...] };
var r = data.cells.reduce(function(pv, cv) {
if ( pv[cv.geo__name] ) {
pv[cv.geo__name] += cv.gdp_growth__avg;
} else {
pv[cv.geo__name] = cv.gdp_growth__avg;
}
return pv;
}, {});
console.log(r);
Run Code Online (Sandbox Code Playgroud)
输出示例:
{
'united states of america': 18.76051995774611,
'china': 71.39814330096999,
'russia': -36.291297610751,
'botswana': -8.730754563729707
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17504 次 |
| 最近记录: |