这是我的标记:
<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>
这笔交易是我需要一个脚本来计算<div id="feed">
中出现的所有单词。
输出应包含在<p>
标记或<span>
标记中。
<h3>The top 3 used words in this feed:</h3>
1. <p>cats</p> 4x
2. <p>like</p> 3x
3. <p>hate</p> 1x
这将是输出。
正如您所看到的那样(或更好的字母)I
未被考虑。计数不会考虑3个字母以下的每个字。
答案 0 :(得分:8)
只需循环遍历innerHTML,在空格上拆分文本,并使用结果数组的每个值添加或更新由找到的单词索引的主数组,其值为单词的计数。
答案 1 :(得分: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.
你需要修改它以拒绝短于3个字符的单词,但你明白了。
答案 2 :(得分:3)
var text = document.getElementById('myDiv').textContent.split(' ');
var words = {};
text.forEach(function(n, i, ary){
if(n.length > 3) {
words[n] = (words[n] || 0) + 1;
}
});
这就是我要对单词进行排序的方法。在HTML的某个地方,我将有一个用于自动编号的ol元素
var ol = document.getElementById('myOl');
var sorted_words = [];
for(var i in words) if(words.hasOwnProperty(i) {
sorted_words.push([i, words[i]]);
}
sorted_words.sort(function(a, b){
return b[0] - a[0];
})
.reverse()
.slice(0, 3)
.forEach(function(n, i, ary){
var li = document.createElement('li')
.appendChild(document.createElement('p'))
.textContent = n[1] + " " + n[0] + "x";
ol.appendChild(ul);
});
这样的事情应该有用......