所以我正在做一個演算法挑戰,給我一個單詞陣列,我必須將單詞的第一個字母大寫,然后回傳帶有新單詞的陣列。它必須用遞回來完成。我相信我的方法是錯誤的,但如果是概念上的問題,請讓我知道,我應該如何思考這個問題。如果有人能幫助描述我應該如何在概念上和代碼中處理這個問題,這將是非常有益的。
從概念上描述我的想法:
1st call: ['Car'] capitalizeFirst([taco, banana])。
第二個呼叫。['Taco'] capitalizeFirst([banana])。
3rd call: ['Banana'] capitalizeFirst(['']) 。
因此,當它往回走時,會回傳
['Banana'] ['"]
['Taco'/span>] ['Banana'/span>]
['Car'] ['Taco', 'Banana']
回傳 ['Car','Taco','Banana']
但我得到的是'CarTacoBanana'。 這里是我采取的方法。
function capitalizeFirst(arr){
if (!arr.length) return ' ';
arr[0] = arr[0].charAt(0)。 toUpperCase() arr[0].slice(1)。
return [ arr[0] capitalizeFirst(arr.slice(1)) ];
}
capitalizeFirst(['car','taco','banana']) 。// ['Car', 'Taco', 'Banana']/span>
(編輯)我能夠解決我的方法是錯誤的!這是我的解決方案
。 let newArr = []。
if (!arr.length) {
return newArr;
}
else {
arr[0] = arr[0].charAt(0)。 toUpperCase() arr[0].slice(1)。
newArr.push(arr[0])。
}
console.log(newArr, 'test')。
return newArr.concat(capitalizeFirst(arr.slice(1) )
// return newArr;.
uj5u.com熱心網友回復:
。function capitalizeFirst(arr) {
//定義遞回的終端條件。
if (!arr.length) return [] 。
// utility to capitalize first letter[/span].
const capWord = s => s.charAt(0)。 toUpperCase() s.slice(1)。
//一個寫得很好的遞回函式會明確每個迭代的作用,在此:
///對第一個詞進行大寫,然后對其余的詞進行遞回...。
const first = arr[0], rest = arr.slice(1)。
return [ capWord(first), ...capitalizeFirst(rest)] 。
}
let arr = [ 'ever', 'good', 'boy', 'does', 'fine'] 。
let result = capitalizeFirst(arr)。
console.log(result);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
我認為你得到了大致的想法,但是你錯過了一些從一般演算法設計以及實作角度的東西。最好是統一回傳一些東西(比如這里的[]),然后把它們組合起來形成答案。因此,我對基本情況和歸納情況做了一些改變,然后你就可以得到正確格式的答案了。
這是粗略的代碼,你可以從這一點開始自己檢查基本的角落情況測驗。
uj5u.com熱心網友回復:
你的思考程序很接近,但我建議將[""]改為簡單的[]--我不知道空字串是怎么來的,但不需要 -
const capitalize = ([ first, ...more ]/span>) =>
first.toUpperCase() more.join(" ")
const capitalizeAll = ([ first, ...more ]/span>) =>
first == null ?
? []
: [capitalize(first), ...capitalizeAll(more)]
console。 log(capitalizeAll(["car", "taco", "banana"])
// ["Car", "Taco", "Banana"]/span>
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
注意,capitalizeAll只不過是Array.prototype.map對capitalize的硬編碼呼叫 -
const capitalize = ([ first, ...more ]/span>) =>
first.toUpperCase() more.join(" ")
console.log(["car", "taco", "banana"] 。 map(capitalize))
// ["Car", "Taco", "Banana"]
<iframe name="sif3" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306935.html
標籤:
