如何计算window.prompt中的单词并按出现次数对其进行排序?

时间:2018-09-29 12:32:52

标签: javascript

我需要计算提示中的单词并将其写入数组。接下来,我必须计算它们的外观并对其进行排序。 我有这样的代码:

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

3 个答案:

答案 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");
 }