我有一个JSON文件设置如下
"mediaPosts": [
{
"index": 0,
"source": "Twitter",
"post": "commodo cillum in ut aliquip ad commodo esse duis sunt pariatur nostrud quis quis magna non ipsum Lorem cupidatat laboris",
"sentiment": "Positive",
"date": "24/05/2014",
"gender": "Male",
"age": 30,
"country": "Gabon"
},....]
该文件包含4000条记录。
我想知道的是找到在此JSON文件中出现次数最多的5个国家/地区的最佳方式
我能想到的唯一方法是:
1.为世界上每个国家创建一个变量(这意味着要创建一个高达196个变量)
2.浏览我的JSON列表
for (i = 0; i < postObject.mediaPosts.length; i++)
检查每条记录的国家/地区字符串值,并增加相应国家/地区变量的计数
if(postObject.mediaPosts [i] .country ==&#34; Afghanistan&#34;){afghanistan ++;} 否则if(postObject.mediaPosts [i] .country ==&#34; Albania&#34;){albania ++;}
然后找到5个最大的值amogst my country variables
然而,这个过程感觉非常麻烦,所以我想知道是否有更好的方法来做这个&gt;
答案 0 :(得分:2)
var countries = {};
for (i = 0; i < postObject.mediaPosts.length; i++) {
var country = postObject.mediaPosts[i].country;
countries[country] = countries[country] ? countries[country] + 1 : 1
}
然后你将有一个国家的对象(一个关联数组)作为键,以及它们在输入对象中的计数。像这样:
countries = {
"Afghanistan" : 5,
"Albania" : 3,
"Bulgaria" : 2,
//... the other countries
}
从那里你可以循环它并从中创建对
var countryCountPairs = {};
for (country in countries) {
countryCountPairs.push({country : country, count : countries[country]});
}
这将为您提供如下数据结构:
countryCountPairs = {
{ country : "Afghanistan", count : 5 },
{ country : "Albania", count : 3 },
{ country : "Bulgaria", count : 2 },
//... the other countries
}
这很容易排序:
countryCountPairs.sort(function(a, b) {
// I think biggest value comes first with this, but you will have to test it.
return b.count - a.count;
});
这将为您提供上述的排序版本。