我试图找出字符串中每个字符的数量。
我已经搜索了一段时间,似乎无法弄清楚为什么我的switch语句在第一个案例后就停止了。
function charFreq(string){
var splitUp = string.split("");
console.log(splitUp);
var a;
var b;
var c;
var v;
for (var i = 0; i<splitUp.length; i++){
if (i<1){
switch (splitUp[i]){
case "a":
a = 1;
break;
case "b":
b = 1;
break;
case "c":
c = 1;
break;
case "v":
v = 1;
break;
}
} else {
switch (splitUp[i]){
case "a":
a += 1;
break;
case "b":
b += 1;
break;
case "c":
c += 1;
break;
case "v":
v += 1;
break;
}
}
}
console.log("There are " + a + " A's, " + b + " B's, " + c + " C's, and " + v + " V's.")
}
charFreq("aaabccbbavabac");
我做错了什么会使控制台读取:
有6个A,NaN B,NaN C和NaN V。
答案 0 :(得分:1)
您的代码存在的问题是变量(a
,b
,c
和v
)未初始化。 for循环遍历字符,但只有第一次迭代为其中一个变量(等于字符)分配初始值。其余的循环尝试将这些变量的值增加1,但大多数(除了一个)都是未定义的。因此,要修复代码,请为变量分配初始值:
var a = 0;
var b = 0;
var c = 0;
var v = 0;
然后你可以简化你的for循环:
for (var i = 0; i < splitUp.length; i++) {
switch (splitUp[i]) {
case "a":
a += 1;
break;
case "b":
b += 1;
break;
case "c":
c += 1;
break;
case "v":
v += 1;
break;
}
}
但是用这种方式计算字符太复杂了。您可以使用更简单的代码,例如:
var str = "teststring";
var chars = [];
str.split('').map(function(char) {
chars[char] = (chars[char] === undefined) ? 1 : chars[char] + 1;
});
console.log(chars); // [t: 3, e: 1, s: 2, r: 1, i: 1…]
答案 1 :(得分:0)
如果要初始化所有变量,那么if语句是多余的。它打破了你的逻辑,因为你只根据索引是否在第一个字符上而分配一个数字。