数组中的热门词汇

时间:2016-05-06 14:51:18

标签: javascript arrays

我正在尝试从阵列中获得最受欢迎/常用的单词,我尝试了以下但是它只是说'Rain'而是在控制台中显示它[rain:2,hot:1]

我做错了什么?我只想显示没有数字的头号最流行的单词。

任何帮助/建议都会有所帮助,谢谢。

  var defaultArray = [{age:"25-35",country:"united kingdom",sex:"male",word:"rain"},{age:"25-35",country:"united arab emirates",sex:"male",word:"hot"},{age:"25-35",country:"zimbabwe",sex:"female",word:"rain"}];

  /* Popular */
  function popular() {
    var words = [];
    for(var p = 0; p < defaultArray.length; p++){
      var word = defaultArray[p].word;
      words.push(word);
      console.log(words);
    }
    var count = [];
    for (var i = 0, j = words.length; i < j; i++) {
      if (count[words[i]]) {
        count[words[i]]++;
      }
      else {
        count[words[i]] = 1;
      }
    }
    console.log(count);
  }
  popular();

5 个答案:

答案 0 :(得分:5)

您只需循环遍历计数数组并找到具有最高计数的单词:

var mostCommonWordCount = 0;
var mostCommonWord = "";
for (var key in count) {
    if (count[key] > mostCommonWordCount) {
        mostCommonWordCount = count[key]
        mostCommonWord = key;
    }
}
console.log(mostCommonWord);

运行后,mostCommonWord将包含计数最高的单词。唯一需要注意的是,例如,如果有多个单词出现3次,则count数组中的第一个单词将被分配给mostCommonWord。因此,如果您想要的东西会返回多个单词,如果它们都具有相同的计数,那么您需要稍微修改一下。

免责声明:可能有更好的方法,但这是我想出的第一件事。

答案 1 :(得分:1)

与您拥有的原始功能保持一致。你可以稍微调整一下以获得最受欢迎的单词。注意:这不能说明关系。

var defaultArray = [
  {age:"25-35",country:"united arab emirates",sex:"male",word:"hot"},
  {age:"25-35",country:"united kingdom",sex:"male",word:"rain"},
  {age:"25-35",country:"united arabemirates",sex:"male",word:"hot"}];

/* Popular */
function popular() {
  var count = 0
  var max=0;
  var currentword="";
  var words = [];

  for(var p = 0; p < defaultArray.length; p++){
    var word = defaultArray[p].word;
    words.push(word);
  }

  for (var i = 0; i<words.length; i++) {
    if (max<=count){
      max=count;    
    }
    count=0;
    for (var x=0; x<words.length; x++)
    {
      if (words[i]==words[x] ){
        count++;
      }
      if (count>max)currentword=words[i];
    }
  }
  console.log(currentword);
} 

答案 2 :(得分:0)

您可以在创建单词数组后删除几乎所有内容,而是添加此功能:

function mostPopularWord(arr){
  return arr.sort(function(a,b){
    return arr.filter(function(v){ return v===a }).length -
        arr.filter(function(v){ return v===b }).length
  }).pop();
}

然后传递你的数组,如:

mostPopularWord(words) // Returns rain

这是jsFiddle

我没有写这个功能,我在寻找帮助的方法时找到了它。您可以在此处详细了解您尝试执行的操作:Get the element with the highest occurrence in an array

答案 3 :(得分:0)

对于计数和灌浆,您可以使用reduce函数,如下所示:

var defaultArray = [{
    age: "25-35",
    country: "united kingdom",
    sex: "male",
    word: "rain"
  }, {
    age: "25-35",
    country: "united arab emirates",
    sex: "male",
    word: "hot"
  }, {
    age: "25-35",
    country: "zimbabwe",
    sex: "female",
    word: "rain"
  }];

  /* Popular */
  function popular(arr) {
    return arr.reduce(function(acc, cur) {
      if (!acc[cur.word]) acc[cur.word] = 0;
      acc[cur.word] += 1;
      if (acc.MaxCount < acc[cur.word]) {
        acc.MaxCount = acc[cur.word];
        acc.PopularWord = cur.word;
      }
      return acc;
    }, {
      MaxCount: 0
    }).PopularWord;
  }
  document.write('Max popular word: ',popular(defaultArray));

答案 4 :(得分:0)

我强烈推荐像lodash这样的JavaScript实用程序库,在这种情况下你可以这样做:

var obj = _.countBy(_.map(defaultArray, 'word'));
console.log(obj); // Object {rain: 2, hot: 1}

var word = _.keys(obj).reduce(function (a,b) { return obj[a] > obj[b] ? a : b });
console.log(word); // "rain"

注意:请参阅纯JavaScript功能的其他答案