我正在尝试使用indexOf()计算字母在字符串中出现的次数。你能告诉我我的代码在哪里出错吗?谢谢!
var string = 'Lets find l as many times as we can. Love is natural, love you lots';
var myFunc = function (letter) {
newString = 0;
for (var i = 0; i < letter.length; i += 1) {
if (string.indexOf('l')) {
newString += 1;
}
}
return newString;
}
答案 0 :(得分:8)
而不是这个
if (string.indexOf('l')) {
newString += 1;
}
您可以使用charAt甚至直接编制索引来检查字符串的每个字母。
喜欢这个
if (letter[i] == 'l') {
newString += 1;
}
或者
if (letter.charAt(i) == 'l') {
newString += 1;
}
这里是FIDDLE
请注意,如果您要使用indexOf
,则需要直接在相关字符串上调用它,例如
letter.indexOf('l')
答案 1 :(得分:7)
另一个答案非常好,但是如果你真的想要一个使用indexOf
的解决方案(正如你的问题的标题所示),你需要提供第二个参数,告诉它从哪里开始寻找下一次出现:
var myFunc = function (str) {
var i = 0, c = 0;
do {
i = str.indexOf('l', i);
} while (++i && ++c);
return c;
}
但是,如果使用indexOf
不是一项要求,您可以将其简化为:
var myFunc = function (str) {
return str.split('l').length - 1;
}
答案 2 :(得分:2)
如果您坚持indexOf
:
var myFunc = function (str, letter) {
var count = 0,
p = str.indexOf(letter);
if (p > -1) {
count += (1 + myFunc(str.slice(p + 1, str.length - 1), letter));
}
return count;
};