如何在字符串中计算字母数量?

5

我的代码:

function letterCounter(str) {
    var letters = 0;
    var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for (var i=0; i<str.length;i++) {
        if (str[i] === alphabet.split("")) {
            letters = letters + str[i];
        }
    }
    console.log(letterCounter("Hello World!!!1"));
}

我不确定我犯了什么错误,我的答案是0个字母。谢谢。


仔细看看 str[i] === alphabet.split("") - Wiktor Stribiżew
你还在 letterCounter 函数内部调用 letterCounter 函数。我认为你想把 console.log 语句移到最后一个大括号外面。 - jeff carey
顺便问一下,你是否希望结果包括字母计数? - Wiktor Stribiżew
你认为我应该用什么代替 str[i] === alphabet.split("") - Blueman
你的示例代码应该得到什么结果?如果你想要得到“15”的结果,你不需要这种类型的函数,只需要使用str.length即可。 - Andurit
我希望我的输出为10。 - Blueman
3个回答

8

您在代码中使用了str[i] === alphabet.split("")将一个字符与数组进行比较,这是没有意义的,您需要检查该字符是否在数组中。此外,console.log不能在函数内部,否则会导致它被无限递归调用。

请使用:

function letterCounter(str) {
    var letters = 0;
    var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var ar = alphabet.split("");
    for (var i=0; i<str.length;i++) {
        if (ar.indexOf(str[i]) > -1) {
            letters = letters + 1;
        }
    }
    return letters;
}
console.log(letterCounter("Hello World!!!1"));

另一种方法是使用正则表达式:

var s = "Hello World!!!1";
var rx = /[a-z]/gi;
var m = s.match(rx);
if (m) {
  console.log(m.length);
}


3
您可以使用正则表达式来实现此功能:

function letterCounter (x) {
  return x.replace(/[^a-zA-Z]/g, '').length;
}

console.log(letterCounter('Hello World!!!1'))


1

例如,计算字母e的数量:

var str = "Hello hello hello hello";
var lengthOfE = str.match(/e/gi).length;
console.log(lengthOfE);

然后在循环中使用此方法来计算每个元素的数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接