2016-11-21 80 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; 
 
}