计算使用indexOf在javascript中出现一个字母的次数

时间:2014-01-02 01:52:01

标签: javascript for-loop indexof

我正在尝试使用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;
}

3 个答案:

答案 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;
}

Demonstration

但是,如果使用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;
};

Fiddle