Javascript--统计每个字符串出现的频率并从大到小打印出来

标签 javascript html arrays

用户输入一段文字后,javascript会统计每个单词出现的频率,并从大到小打印出来。我已经使用两个数组来计算每个单词的数量。但是,我真的不知道如何根据数量打印它们,因为计数和单词存储在两个不同的数组中。请帮我。谢谢!

<!DOCTYPE html>
<html>
<head>
<title> practice </title>
<style>
.field{
font-size: 10px; /
width: 400px;
}
</style>

</head>
<body>

<p> This progam will calculate what you want to</p>

<p id="demo"></p>
<p id="result"></p>
<input type="text" id="paragraph" class="field",> 
<button onclick="input()"><b>Submit</b></button>


<script>
function input() {
var test = document.getElementById("paragraph").value;
var arr =[];
 arr = test.toLowerCase().split(" ");
document.getElementById("demo").innerHTML = arr;

function foo(arr) {

    var a = [], b = [], prev;

    arr.sort();
    for ( var i = 0; i < arr.length; i++ ) {
        if ( arr[i] !== prev ) {
            a.push(arr[i]);
            b.push(1);
        } else {
            b[b.length-1]++;
        }
        prev = arr[i];
    }

   return [a, b];
}

 var result = foo(arr);
document.write('[' + result[0] + ']<br>[' + result[1] + ']') 
}

</script>
</body>
</html>

最佳答案

你可以试试这个:

1- 插入您的数据:同一对象中的单词和单词计数

2- 使用键 count 对此对象进行排序

<p id="demo"></p>
<p id="result"></p>
<input type="text" id="paragraph" class="field",> 
<button onclick="input()"><b>Submit</b></button>


<script>
function input() {
var test = document.getElementById("paragraph").value;
var arr =[];
 arr = test.toLowerCase().replace(/[^a-zA-Z ]/g, "").split(/\s+/); 
  /*remove all special characters: there remove anything that's not letter*/
  /*or replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '') --> place all characters you want to avoid here */
document.getElementById("demo").innerHTML = arr;

function foo(arr) {

    var a = [];
    var new_item;
    var counter=0;
    for ( var i = 0; i < arr.length; i++ ) {
        new_item=true;
        for (var j = 0; j < a.length; j++) {
           if(a[j]['word']== arr[i]){
               a[j]['count'] ++;
               new_item=false;
           }
        }
       if(new_item){
         a[counter] = {}; a[counter]["word"] = arr[i];a[counter]["count"] = 1;
         counter ++;
       }
       
    }
    a.sort(function(a,b) {
        return parseInt(b.count) - parseInt(a.count);
    });
    return a;
  }

   var result = foo(arr);
   for ( var i = 0; i < result.length; i++ ) {
      document.write("you wrote :"+result[i]['word']+" "+result[i]['count']+" times<br/>");
    }
 
   
}

</script>

关于Javascript--统计每个字符串出现的频率并从大到小打印出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39749835/

相关文章:

javascript - 将数组拆分为多个数组或备用数组 - Javascript

javascript - 检查输入的属性不适用于多个

javascript - jQuery/JavaScript : how to remove all elements in the first <li> except <a>text</a>

java - 如何在Java中识别字符串数组中最长的字母单词? (任何不带符号或数字的子字符串)

c++ - 如何修复 C++ 中的 'Heap has been corrupted ' 错误?

javascript - jQuery 可拖动和透明 PNG - 可拖动区域被透明背景遮挡

javascript - 在 javascript 中使用 webkit-playsinline

javascript - 将图像添加到范围时未终止的字符串文字

java - 程序布局 - 通过 System.in.read 创建适当大小的数组

javascript - 值低于 150px 的 iframe 高度