使用Javascript在JSON文件中查找最常用的值

时间:2014-11-24 05:54:33

标签: javascript json search

我有一个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++)
  1. 检查每条记录的国家/地区字符串值,并增加相应国家/地区变量的计数

    if(postObject.mediaPosts [i] .country ==&#34; Afghanistan&#34;){afghanistan ++;} 否则if(postObject.mediaPosts [i] .country ==&#34; Albania&#34;){albania ++;}

  2. 然后找到5个最大的值amogst my country variables

  3. 然而,这个过程感觉非常麻烦,所以我想知道是否有更好的方法来做这个&gt;

1 个答案:

答案 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;  
});

这将为您提供上述的排序版本。