如何使用slice()重写.length()属性?

时间:2016-11-26 22:07:20

标签: javascript recursion

这是我的任务:

  

到目前为止,您应该使用字符串的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,然后累积我的计数变量。我不明白为什么我的计数变量没有累积。

6 个答案:

答案 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))

我会指出原始代码中的错误,以便于理解。

  1. 递归基本案例不正确。 string.slice(0)将返回 如果字符串非空,则返回true,因此请使用!string.slice(0)

  2. 计数值未初始化且未传递 递归。

答案 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"));




这也有效。