扫描特定的div并显示3个最常用的单词

Tom*_*kay 3 javascript jquery

这是我的标记:

<body>
  <div id="headbox">
    <p>Whatever...</p>
  </div>
    <div id="feed">
    <div>
    <p>I hate cats</p>
    </div>
    <div>
    <p>I like cats</p>
    </div>
    <div>
    <p>I like cats</p>
    </div>
    <div>
    <p>I like cats</p>
    </div>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

这笔交易是我需要一个脚本来计算出现在中的所有单词<div id="feed">.

输出应包含在<p>标签或<span>标签中.

<h3>The top 3 used words in this feed:</h3>
1.&nbsp;<p>cats</p>&nbsp;4x
2.&nbsp;<p>like</p>&nbsp;3x
3.&nbsp;<p>hate</p>&nbsp;1x
Run Code Online (Sandbox Code Playgroud)

这将是输出.

正如你所看到的那样(或更好的字母)I没有被考虑.计数不会考虑3个字母以下的每个字.

Jon*_*n M 8

只需循环遍历innerHTML,在空格上分割文本,并使用结果数组的每个值来添加或更新由找到的单词索引的主数组,其中值是单词的计数.

  • +1,但我建议使用主对象而不是主数组. (2认同)
  • @Tomkay,你打赌.只需告诉我您的信用卡号码,它就会在那里.:)你可以做到,伙计.试一试吧. (2认同)
  • @Jonathan M:它是:`var o = {}; o ["它是"] = 123;`. (2认同)

mae*_*ics 5

按空格分割目标元素的内部文本,计算单词频率,按最频繁排序,并根据您的要求格式化前3个.

像这样(未经测试):

var getMostFrequentWords = function(words) {
  var freq={}, freqArr=[], i;
  // Map each word to its frequency in "freq".
  for (i=0; i<words.length; i++) {
    freq[words[i]] = (freq[words[i]]||0) + 1;
  }
  // Sort from most to least frequent.
  for (i in freq) freqArr.push([i, freq[i]]);
  return freqArr.sort(function(a,b) { return b[1] - a[1]; });
};
var words = $('#feed').get(0).innerText.split(/\s+/);
var mostUsed = getMostFrequentWords(words);
// Now you can prepare "mostUsed.slice(0,3)" as the top 3 words/count.
Run Code Online (Sandbox Code Playgroud)

你需要修改它以拒绝短于3个字符的单词,但你明白了.