计算每个字母的频率 - javascript

时间:2016-08-15 16:08:09

标签: javascript regex

我正在利用JSBin编写一个JS代码块来接受输入字符串,然后返回字符串中包含的每个字母(删除重复的字母和其他字符),然后计算字符串中每个字母的使用次数。我正在尝试整合正则表达式以进行其他练习。

我写的代码不是删除重复项,也不是正确计算每个字符的频率。有人可以告诉我我做错了吗?

这是HTML:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <input type="text" id="input"></input>
  <button onclick="count()">Count letters</button>
  <br>
  <br>
  <div id="output">Result</div>
</body>
</html>

这是JS:

function count() {
  var x = document.getElementById("input").value.toString();
  var y = "";
  var z = [];

//Removal of white spaces and other characters.

  x = x.replace(/[^a-z]/gi,"");

//Elimination of duplicate letters.

  for (var i = 0; i < x.length; i++) {
    if (/x.charAt(i)/i.test(y) === false) {
      y += x.charAt(i);
    }
  }

//Count how many of each letter exists within the input string.

  for(var i = 0; i < y.length; i++) {
    for (var j = 0; j < y.length; j++) {
      var freq = 0;
      if (y.charAt(i) == y.charAt(j)) {
        freq += 1;
      }
      z.push(freq);
    }
  }

//Write result to HTML document.

  for (var i = 0; i < y.length; i++) {
    document.write(y.charAt(i));
    document.write(", ");
    document.write(z[i]);
    document.write("<br>");
  }
}

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

你的想法太复杂了。只需遍历规范化的字符串,并计算字母:

window.count = function() {
  var input = document.getElementById("input").value.toString();
  var result = {};

  input = input.replace(/[^a-z]/gi,"");
  var letters = input.split('');
  for(index in letters) {
    result[letters[index]] = result[letters[index]] +1 || 1;
  }
  document.querySelector('#output').innerHTML = JSON.stringify(result);
}

demo fiddle

答案 1 :(得分:0)

您可以在单个替换功能中执行此操作。这是一个例子。

    function getFreq(str){
       var freq={};//an object to fill
       /*var tmp = result not required*/ str.toLowerCase()
              .replace(/[a-z]/ig, function(match /*that is [a-z]*/){
                  freq[match] = (freq[match] || 0) + 1;//fill object
                  return match;//do not change str
                  });
      console.log(JSON.stringify(freq));
      return freq;
    }
    
<input type="text" onchange="getFreq(this.value);" />