Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将数组中一个对象中具有相同键的所有值相加并得到它们的平均值_Javascript_Json_Highcharts - Fatal编程技术网

Javascript 如何将数组中一个对象中具有相同键的所有值相加并得到它们的平均值

Javascript 如何将数组中一个对象中具有相同键的所有值相加并得到它们的平均值,javascript,json,highcharts,Javascript,Json,Highcharts,所以我有这个json,我需要添加每个键的值,这些键与对象具有的键相同,并且还将计算它们的平均值,这是我的json var arraySeries = [{"country":"United States","data":2}, {"country":"Venezuela","data":0}, {"country":"Singapore","data":3}, {"country":

所以我有这个json,我需要添加每个键的值,这些键与对象具有的键相同,并且还将计算它们的平均值,这是我的json

var arraySeries = [{"country":"United States","data":2},
                   {"country":"Venezuela","data":0},
                   {"country":"Singapore","data":3},
                   {"country":"United States","data":0},
                   {"country":"Germany","data":2},
                   {"country":"United States","data":2},
                   {"country":"Canada","data":2},
                   {"country":"Germany","data":-4}];
这是我的预期结果

var newArraySeries = [{"country":"United States","data":[1.33333]},
                   {"country":"Venezuela","data":[0]},
                   {"country":"Singapore","data":[3]},
                   {"country":"Canada","data":[2]},
                   {"country":"Germany","data":[-1]}];

newArraySeries中的数据应该是数组,我将在highchart地图中使用它。。我做了一些谷歌研究,但我找不到任何类似的文章。我希望你能帮助我用标准javascript和使用临时变量解决问题

var countries = {}
var countries_count = {}
var newArraySeries = []
arraySeries.forEach(
    function(e){
        if(!countries[e.country]){
            countries[e.country] = 0
            countries_count[e.country] = 0
        }
        countries[e.country] += e.data
        countries_count[e.country]++
    }
)
for(var country in countries){
    newArraySeries.push({country : country, data : countries[country] / countries_count[country]})
}
你可以用图书馆来做


试试JSFIDLE。

我以某种方式获得了我想要的对象,但值与我预期的不同。。我想我必须重新检查我的数据值,谢谢你的帮助!:)嗨,xecgr,你的答案太棒了,是这里为数不多的几个答案之一。我不精通JS,所以我会问你如何处理第三个对象属性,例如大陆或时区。谢谢
var arraySeries = [{"country":"United States","data":2},
           {"country":"Venezuela","data":0}];

var res = alasql('SELECT country, AVG(data) AS data FROM ? GROUP BY country',
                  [arraySeries]);