我想计算letter
中单个字符str
表示的次数。
我已经尝试过这段代码,但我不断收到一个只有1的值。
var x = document.getElementById('txt1').value;
var y = document.getElementById('txt2').value;
var letter = x;
var str = y;
for (var i = count = 0; i < str.length; count +++(letter === str[i++]));
count;
alert(i);
答案 0 :(得分:1)
<input id="txt1" value="i"/>
<input id="txt2" value="This is my string"/>
<script type="text/javascript">
var x =document.getElementById('txt1').value;
var y = document.getElementById('txt2').value;
var letter = x;
var str = y;
var count = 0;
var arrayX = str.split('');
console.log(arrayX);
for (var i = 0; i < arrayX.length; i++) {
if (arrayX[i] == letter) {
count++;
}
}
alert(count);
</script>
答案 1 :(得分:1)
目前的问题是你的for循环的这一部分:count +++(letter === str[i++])
,让我们来看看会发生什么:
letter === str[i]
,请添加一个(true
)来计算。i
。i >= str.length
。如您所见,count 总是增加至少1,有时2. i
在每次重复时也会增加。
你需要的是一个看似如下的for循环:
for (var i = count = 0; i < str.length; count += (str[i++] == letter));
function getNumber(){
var str = document.getElementById('txt1').value;
var letter = document.getElementById('txt2').value;
var count;
for (var i = count = 0; i < str.length; count += (str[i++] == letter));
document.querySelector('p').innerText = count;
}
&#13;
str: <input type="text" id="txt1"><br>
letter: <input type="text" id="txt2"><br>
<button onclick="getNumber()">Get Result</button><br>
result: <p></p>
&#13;
Or full experience at this jsFiddle
这里^^,count仅在letter == str[i]
时递增,所以如果该条件为false,则count保持不变。
或者,或许不那么简洁,你可以使用regular expression (regex)来达到同样的效果:
var regex = new RegExp(letter, 'g');
var count = (letter.length) ? str.match(regex).length : 0;
答案 2 :(得分:0)
这是使用正则表达式而不是拆分或编写循环的基本实现。
function go() {
var letter = document.getElementById('txt1').value;
var str = document.getElementById('txt2').value;
var re = new RegExp(letter,"g");
var count = (str.match(re || []).length);
alert(count);
}
<label for="txt1">Character</label>
<input type="text" id="txt1" maxlength="1" />
<br/>
<label for="txt2">String</label>
<input type="text" id="txt2" />
<input type="button" value="go" onclick="go()" />