我正在利用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>");
}
}
非常感谢你的帮助!
答案 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);
}
答案 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);" />