【发布时间】:2021-11-10 02:24:09
【问题描述】:
所以我正在做一个算法挑战,给我一个单词数组,我必须将单词的第一个字母大写并返回带有新单词的 arr。它必须通过递归来完成。我相信我的方法是错误的,但是如果从概念上讲,请告诉我以及我应该如何考虑这一点。如果有人可以帮助描述我应该如何在概念上和代码中处理这个问题,那将非常有帮助。
从概念上描述我的想法:
1st call: ['Car'] + capitalizeFirst([taco, banana]);
2nd call: ['Taco'] + capitalizeFirst([banana]);
3rd call: ['Banana'] + capitalizeFirst(['']);
所以当它往回走时它会返回
['Banana'] + ['""']
['Taco'] + ['Banana']
['Car'] + ['Taco','Banana']
returns ['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']
(编辑)我能够解决我的方法是错误的!这是我的解决方案
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;
【问题讨论】:
标签: javascript arrays string algorithm recursion