这是我的任务:
到目前为止,您应该使用字符串的length属性,例如"你好"。长度。您的任务是编写一个名为stringLength的函数,该函数接受一个字符串作为参数并计算该字符串的长度;但是,正如您可能已经猜到的那样,您不能使用字符串的length属性!
相反,您需要使用名为slice的字符串方法。 出于我们的目的,我们可以将slice视为接受一个参数 - 开始切片的索引,并从该索引开始返回一个新的字符串。
这就是我的尝试:
function stringLength(string){
var count = count++;
if(string.slice(0)){
return count}
return stringLength(string.slice(0,-1))
}
console.log(stringLength("game"))
我试图将字符串的每个字符切换回起始索引,索引0,然后累积我的计数变量。我不明白为什么我的计数变量没有累积。
答案 0 :(得分:4)
迭代提案。
function stringLength(string) {
var count = 0;
while (string) {
string = string.slice(1);
count++;
}
return count;
}
console.log(stringLength("game"));

递归提案。
function stringLength(string) {
return string ? 1 + stringLength(string.slice(1)) : 0;
}
console.log(stringLength("game"));

答案 1 :(得分:2)
嗯,我试着用与你相同的格式编写代码。
function stringLength(str, count){
if(!str.slice(0)){
return count;
}
return stringLength(str.slice(0,-1), ++count)
}
console.log(stringLength("game", 0))
我会指出原始代码中的错误,以便于理解。
递归基本案例不正确。 string.slice(0)
将返回
如果字符串非空,则返回true,因此请使用!string.slice(0)
计数值未初始化且未传递 递归。
答案 2 :(得分:1)
你真的应该试着弄清楚自己。否则,你真的在学习这门课程吗?
function stringLength(string) {
if(!string) return 0;
var length = -1;
while(string.slice(length) !== string) --length;
return -length;
}
考虑到您对slice()
的奇怪定义的变体:
function stringLength(string) {
var length = 0;
while(string.slice(length) !== "") ++length;
return length;
}
答案 3 :(得分:1)
您的count变量是每个函数调用的单独变量,因此它将始终获得相同的值而不会继续递增。
你可以用这个:
function stringLength(string){
return string ? 1 + stringLength(string.slice(0,-1)) : 0;
}
console.log(stringLength("game"))
稍微短一点就是取出第一个字符而不是最后一个字符:
return string ? 1 + stringLength(string.slice(1)) : 0;
答案 4 :(得分:0)
我猜你可以尝试使用这样的递归:
function stringLength(string) {
if (string) {
return 1 + stringLength(string.slice(1))
} else return 0
}
答案 5 :(得分:0)
function stringLength(string) {
var len = 0;
while (string) {
string = string.substring(1);
len++;
}
return len;
}
console.log(stringLength("boss"));

这也有效。