开发者问题收集

JavaScript 和数组

2014-01-05
65

尽管我有多年的编程经验,但这个问题一直是我的致命弱点。

我有一个像这样的 json 结果,我想使用 highcharts.com 从中绘制一个时间序列

[{"iso-2":"DE","year":"2000","value":"0"},{"iso-2":"FR","year":"2000","value":"0"},{"iso-2":"KE","year":"2000","value":"0"},{"iso-2":"DE","year":"2001","value":"0"},{"iso-2":"FR","year":"2001","value":"0"},{"iso-2":"KE","year":"2001","value":"0"},{"iso-2":"DE","year":"2002","value":"0"},{"iso-2":"FR","year":"2002","value":"0"},{"iso-2":"KE","year":"2002","value":"0"},{"iso-2":"DE","year":"2003","value":"9355"},{"iso-2":"FR","year":"2003","value":"19490"},{"iso-2":"KE","year":"2003","value":"0"},{"iso-2":"DE","year":"2004","value":"0"},{"iso-2":"FR","year":"2004","value":"0"},{"iso-2":"KE","year":"2004","value":"0"},{"iso-2":"DE","year":"2005","value":"11"},{"iso-2":"FR","year":"2005","value":"8"},{"iso-2":"KE","year":"2005","value":"0"},{"iso-2":"DE","year":"2006","value":"2"},{"iso-2":"FR","year":"2006","value":"1388"},{"iso-2":"KE","year":"2006","value":"0"},{"iso-2":"DE","year":"2007","value":"0"},{"iso-2":"FR","year":"2007","value":"0"},{"iso-2":"KE","year":"2007","value":"0"}]

我想将上述结果动态生成为如下所示的数组

series: [{
            name: 'KE',
            data: [0,0,0,0,0,0,0,0]
        }, {
            name: 'FR',
            data: [0,0,0,19490,0,8,1388,0]
        }, {
            name: 'DE',
            data: [0,0,0,9355,0,2,0]
        }]

非常感谢您对此进行调查

2个回答
var gathered = data.reduce(function(prev, curr) {
    if (prev.hasOwnProperty(curr["iso-2"])) {
        prev[curr["iso-2"]].push(parseInt(curr["value"]));
    } else {
        prev[curr["iso-2"]] = [parseInt(curr["value"])];
    }
    return prev;
}, {});

var result = [];
for (var country in gathered) {
    var obj = {};
    obj["name"] = country;
    obj["data"] = gathered[country];
    result.push(obj);
}

console.log(result);

输出

[ { name: 'DE', data: [ 0, 0, 0, 9355, 0, 11, 2, 0 ] },
  { name: 'FR', data: [ 0, 0, 0, 19490, 0, 8, 1388, 0 ] },
  { name: 'KE', data: [ 0, 0, 0, 0, 0, 0, 0, 0 ] } ]
thefourtheye
2014-01-05

考虑到 JSON 中的数据是按年份排序的,这是我能想到的:

var json_data = '[{"iso-2":"DE","year":"2000","value":"0"},...]'; // This is the json data you have.
var data = JSON.parse(json_data); // Convert JSON data to javascript object or array

// Organize the data in an object
var organized = {};

data.forEach(function (item){
    if (typeof organized[item['iso-2']] !== 'undefined'){
        organized[item['iso-2']].push(item['value']);
    } else {
        organized[item['iso-2']] = [item['value']];
    }
});

// Convert the object to the format you need
var series = [];

for (i in organized){
    series.push({
        name: i,
        data: organized[i]
    });
}
Frax
2014-01-05