我需要计算提示中的单词并将其写入数组。接下来,我必须计算它们的外观并对其进行排序。 我有这样的代码:
let a = window.prompt("Write sentence")
a = a.split(" ")
console.log(a)
var i = 0;
for (let i = 0; i < a.length; i++) {
a[i].toUpperCase;
let res = a[i].replace(",", "").replace(".", "")
var count = {};
a.forEach(function(i) {
count[i] = (count[i] || 0) + 1;
});
console.log(count);
document.write(res + "<br>")
}
我不知道如何将我的单词与出现次数的特定数字联系起来,并一次写下这个单词。 最后应该看起来像: a =“这个句子,这个支架,这个句子,很好。” 这-3 句子-3 很好-1
答案 0 :(得分:1)
如果我没有误解您的要求,那么Array.prototype.reduce()
和Array.prototype.sort()
将为您解决问题。 想象我从您的window.prompt()
let string = `this constructor doesn't have neither a toString nor a valueOf. Both toString and valueOf are missing`;
let array = string.split(' ');
//console.log(array);
let result = array.reduce((obj, word) => {
++obj[word] || (obj[word] = 1); // OR obj[word] = (++obj[word] || 1);
return obj;
}, {});
sorted_result = Object.keys(result).sort(function(a,b){return result[a]-result[b]})
console.log(result);
console.log(sorted_result);
根据问题编辑
let string = `This sentence, this sentence, this sentence, nice.`;
let array = string.split(' ');
array = array.map(v => v.toLowerCase().replace(/[.,\s]/g, ''))
let result = array.reduce((obj, word) => {
++obj[word] || (obj[word] = 1); // OR obj[word] = (++obj[word] || 1);
return obj;
}, {});
console.log(result)
答案 1 :(得分:0)
您可以使用reduce。像这样:
const wordsArray = [...].map(w => w.toLowerCase());
const wordsOcurrenceObj = wordsAray.reduce((acc, word) => {
if (!acc[word]) {
acc[word] = 0;
}
acc[word] += 1;
return acc;
}, {});
这是要跟踪对象中的单词。当单词不存在时,以零初始化。然后,每次遇到该单词时加1。您将最终得到一个像这样的对象:
{
'word': 3,
'other': 1,
...
}
答案 2 :(得分:-1)
在计数的末尾添加另一个循环并打印它们:
for(let word in count) {
console.log(word + " appeared " + count[word] + " times");
}