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

insert words and count in 2 dimensional array javascript

本文关键字:单词 插入 二维数组 JavaScript      更新时间:2023-09-26

我有一个国家名称数组,我想创建名称的二维数组,并且有计数。我拥有的数组是,

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

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

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

等等。

有人可以帮忙吗?谢谢

这是你要求的:

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,我会停下来,这是一张从名字到计数的地图。

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

怎么样:

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, {})))

这是要玩的小提琴。

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

不支持Array.reduce()的旧浏览器应与 UnderscoreJs 中的相应实现一起使用

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

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;
}