在二维数组javascript中插入单词和计数

时间:2013-10-28 00:09:39

标签: javascript

我有一个国家/地区名称数组,我想创建名称的二维数组,并计数。我拥有的阵列是,

names = [Afghanistan,Alaska,Alaska,Alaska,Alaska,Alaska,Argentina,Argentina,British Virgin Islands,British Virgin Islands]

所以我想要二维数组中每个国家的数量。例如,我需要这样的东西

country['Afghanistan, 1]
country['Alaska, 5]
country['Argentina, 2]

等等。

请有人帮忙。感谢

3 个答案:

答案 0 :(得分:1)

这就是你要求的:

var nameCounts = {};
for(var i = 0; i < names.length; i++) {
    if(names[i] in nameCounts) {
        nameCounts[names[i]]++;
    } else {
        nameCounts[names[i]] = 1;
    }
}

var country = [];
for(var name in nameCounts) {
    country.push([name, nameCounts[name]]);
}

虽然如果我是你,我会在填写nameCounts后停止,这是一张从名字到伯爵的地图。

此外,如果您知道名称按字母顺序排列,则可以对此进行优化,如您的示例所示。

答案 1 :(得分:0)

怎么样:

names = ["Afghanistan","Alaska","Alaska","Alaska","Alaska","Alaska","Argentina","Argentina","British Virgin Islands","British     Virgin Islands"];

function countWords(o,n){
    o[n]=(o[n])?o[n]+1:1;
    return o; 
};

function makeTuples(obj){
    var tuples=[];
    for(var i in obj){
        tuples.push([i, obj[i]])
    }
    return tuples;
}
console.log(makeTuples(names.reduce(countWords, {})))

以下是Fiddle

有关Array.reduce()的文档,请查看MDN

不支持Array.reduce()的较旧浏览器应与UnderscoreJs

中的相应实现一起使用

答案 2 :(得分:0)

这是另一种直接创建结果数组的方法:

function getNamesCount(a) {
  var nameIndex = {};
  var results = [];

  for (var i=0, iLen=a.length, name; i<iLen; i++) {
    name = a[i];

    if (!nameIndex.hasOwnProperty(name)) {
      nameIndex[name] = results.length;
      results.push(name, 0);
    }
    results[nameIndex[name] + 1] += 1;
  }
  return results;
}