Reputation:
I want to count the number of times the single character, denoted by letter
, occurs in str
.
I have tried this code but I constantly receive back a value of just 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);
Upvotes: 0
Views: 1188
Reputation:
The current problem is this part of your for loop: count +++(letter === str[i++])
, let's walk through what happens:
letter === str[i]
, add one (true
) to count.i
.i >= str.length
.As you can see, count is always incremented by at least 1, sometimes 2. i
is also incremented in each repetition.
What you need is a for-loop that looks like:
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;
}
str: <input type="text" id="txt1"><br>
letter: <input type="text" id="txt2"><br>
<button onclick="getNumber()">Get Result</button><br>
result: <p></p>
Or full experience at this jsFiddle
Here ^^, count is only incremented if letter == str[i]
, so if that condition is false, count remains unchanged.
Or, perhaps less succinctly, you can use a regular expression (regex) to the same effect:
var regex = new RegExp(letter, 'g');
var count = (letter.length) ? str.match(regex).length : 0;
Upvotes: 1
Reputation: 4004
Here's a basic implementation using regex instead of splitting or writing a loop.
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()" />
Upvotes: 0
Reputation: 8206
something like this? http://jsfiddle.net/swm53ran/96/
<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>
Upvotes: 1