如何使用slice()重写.length()属性?
这是我的任务:如何使用slice()重写.length()属性?
现在,你应该有字符串的长度属性,例如工作“你好”。长度。你的任务是编写一个名为stringLength的函数,它接受一个字符串作为参数并计算该字符串的长度;然而,正如你可能猜到的那样,你不允许使用字符串的长度属性!
相反,您需要使用名为slice的字符串方法。 出于我们的目的,我们可以将切片视为一个参数 - 从开始切片的索引,并返回从该索引开始的新字符串。
这是我的尝试:
function stringLength(string){
var count = count++;
if(string.slice(0)){
return count}
return stringLength(string.slice(0,-1))
}
console.log(stringLength("game"))
我试图将字符串的每个字符切回至开始索引,索引0,然后我积累计数变量。我不明白为什么我的count变量没有积累。
迭代建议。
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"));
我认为我的问题是我没有设置为0?也许这就是它没有积累的原因? – heliu
不仅需要'返回1 + stringLength(...)'。 –
我想你可以尝试使用递归这样的:
function stringLength(string) {
if (string) {
return 1 + stringLength(string.slice(1))
} else return 0
}
你真的应该尝试自己看着办吧。否则,你真的在学习这个主题吗?
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;
}
您的计数变量是每个函数调用单独的变量,所以它总是会得到同样的价值,而不是不断递增。
您可以使用此:
function stringLength(string){
return string ? 1 + stringLength(string.slice(0,-1)) : 0;
}
console.log(stringLength("game"))
短的位将被取出来的第一个字符,而不是最后:
return string ? 1 + stringLength(string.slice(1)) : 0;
嗯,我试着写代码的格式与您所做的相同。
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)
将返回 真如果字符串非空,所以使用!string.slice(0)
计数值未初始化并没有被流传下来 递归。
这是'切片'的不同定义比javascript使用。 – Ouroborus