2016-11-21 53 views
1

这是我第一个问题,当我开始我的编程之旅时堆栈溢出,所以我欢迎任何有关改进我的问题提问或研究技巧的建议。替代字符串长度属性

我想弄清楚如何确定字符串的长度,而不使用.length。相反,我被允许使用称为切片的字符串方法,并且问题在我构建递归代码时要求考虑索引。

我的做法是通过向后来解决这个没有上述限制性第一的最简单的方式思考想到这一点:

function stringLength (string) { 
    return string.length; 
} 
    stringLength("Goodbye"); // This would invoke 7. 

如果我再利用.slice方法和检验指标:

"Goodbye".slice(0); // This would invoke "Goodbye". 
"Goodbye".slice(7); // This would invoke "". 

因此获得字符串的长度,我也可以尝试来确定,以调用“”或试图找到最后一个字符的字符串中的指标,我将不得不“片”的字符数加1.

以下是我迄今为止的想法,但不确定我是否会朝着正确的方向前进,并且我不知道我的其他陈述中应该发表什么意见 - 任何建议或建议?

function stringLength (string) { 
    var index = 0; // I'm pretty sure this is wrong! 

// My base case establishes that if the index number within the slice method invokes nothing, that index number is the length of the string 

if (string.slice(index) === "") { 
    return index; 

// Otherwise, cycle through the function until the index number is correct. 

    } else { 
     return string.slice(index + 1); 
     } 
} 
+0

您还可以循环字符串,并计算每个迭代。但我可以问为什么你不使用'.length'属性? –

+0

.slice采用两个参数开始和结束,但如果您省略第二个参数,则认为它是最后一个索引。看看http://www.w3schools.com/jsref/jsref_slice_string.asp为什么你不愿意使用长度属性。 – Manish

+0

@Mr_Green这是我做这个学习课程时的练习的一部分。我个人对.length属性非常熟悉,但这个练习鼓励我们在盒子外面思考并利用递归。 – misteryeo

回答

0

阅读documentation for slice。它返回一个新字符串,它是旧字符串的一部分。这意味着你可以重复slice一个字符直到你没有任何东西。计算你所做的slice的数量,你知道这个字符串有多长!

示例代码

function stringLengthBySlice(s) { 
    var length = 0; 
    while(s != "") { 
     s = s.slice(1); // This is the key line. It takes a slice of the string with 
          // all but the first character. 
     length++' 
    } 

    return length; 
} 
+0

@ Mr.7 JimBaldwin的答案是没有解释的代码墙。 OP要求了解如何解决问题,而不仅仅是查看工作代码。 –

+0

谢谢@ just.another.programmer,你完全正确,非常感谢你的解释!虽然我需要使用递归而不是循环来完成它,但您一次只关闭一个字符的解释并计算出真正帮助我的方法! – misteryeo

0

您可以使用Array.forEach组合split()

function stringLength(str) { 
 
    var myArray = str.split(''); 
 
    var i = 0; 
 
    myArray.forEach(function(value) { 
 
    i++; 
 
    }); 
 
    return i; 
 
} 
 

 
console.log(stringLength("Goodbye"))

0

这个什么:

var count = 0, string = "Goodbye"; 
string.split('').forEach(function(){ 
    count++; 
}); 
console.log(count); 
0

只要试试这个forEach()。其从启动

var length=0; 
 
var testing = "Goodbye".split("").forEach(function (item,index){ 
 
    length =index; 
 
}) 
 

 
console.log(length)//0 to 6

2

有几种方法可以找到一个字符串的长度不会对字符串使用.length

var str = "Goodbye"; 
 
console.log(str.split("").length); // I'm not using length on string, but on array

使用String.prototype.lastIndexOf()。它将返回最后一次出现指定值的调用String对象内的索引,从后向搜索。

var str = "Goodbye"; 
 
console.log(str.lastIndexOf(""));

var str = "Goodbye"; 
 

 
var length = 0; 
 
while (str != "") { 
 
    str = str.substring(1); 
 
    ++length; 
 
} 
 

 
console.log(length);

+1

你的第二种方法很好。第一个对我来说没有必要。 :) –

+0

不知道第二种方法 – Adrian

2

既然你都应该用切片的方法:

function stringLength(s) { 
    let i = 0; 
    while(s != '') { 
     i += 1; 
     s = s.slice(1); 
    } 
    return i; 
} 
0

您可以使用lastIndexOf字符串属性。

的第一个字符的索引是0,并且最后一个字符的索引为str.length - 1。lastIndexOf()方法区分大小写

'Goodbye'.lastIndexOf('') 
1

这里是使用一个递归解决方案:

var s = "Goodbye"; 
 

 
console.log(stringLength(s)); 
 

 
function stringLength (string, length) { 
 
    length = length || 0; 
 
    if (string.slice(length)) { 
 
    return stringLength(string, ++length); 
 
    } 
 
    return length; 
 
}