function capitalizeFirst(arr, new_arr) {
if (arr.length === 0) return new_arr;
let str = arr.pop();
console.log(str);
return capitalizeFirst(arr, new_arr.push(str));
}
这是我的代码。目标是通过此练习练习递归。我给函数以下参数
capitalizeFirst(['car','taco','banana'], []);
new_arr显然是一个数组。为什么推方法不起作用?另外,当我将return语句更改为
时 return capitalizeFirst(arr, [].push(str));
并跟随chrome调试器,数字1一直传递到数组而不是arr.pop()值。是什么导致此行为?我也没有在实现中添加首字母大写。如果有人想知道为什么我的代码没有按照方法名称的说明进行操作,那将只是在push方法中进行replace()调用。
感谢您的帮助
答案 0 :(得分:7)
从W3C:
push()方法将新项目添加到数组的末尾,并返回新的长度。
第一个循环应该没问题,但是因为您递归地传递了.push
,所以第二个循环看到了一个数字而不是一个数组,因为push
返回了一个数字。
按自己的行,然后仅将new_arr作为参数传递。
答案 1 :(得分:3)
基本上,您的错误主要是因为push()
返回了将元素压入数组后的数组长度,这将作为递归调用的参数而不是数组传递:
push()方法将一个或多个元素添加到数组的末尾,并返回新的数组长度。
下一个简单的修复方法是
function capitalizeFirst(arr, new_arr)
{
if (arr.length === 0)
return new_arr;
let str = arr.pop();
// Added code to capitalize first letter.
str = str.charAt(0).toUpperCase() + str.slice(1);
new_arr.push(str);
return capitalizeFirst(arr, new_arr);
}
console.log(capitalizeFirst(['car','taco','banana'], []));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
答案 2 :(得分:3)
如果您console.log(typeof new_arr)
会得到number
作为答案。
原因是arr.push()
的返回值是该值被推入的索引,而不是新数组。因此,如果您这样做,您的作品将是:
function capitalizeFirst(arr, new_arr) {
if (arr.length === 0) return new_arr;
let str = arr.pop();
new_arr.push(str);
return capitalizeFirst(arr, new_arr);
}
答案 3 :(得分:2)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push
push()方法将一个或多个元素添加到数组的末尾,然后 返回数组的新长度。
function capitalizeFirst(arr, new_arr) {
console.log("Type of new_arr : ",typeof(new_arr),":", new_arr);
if (arr.length === 0) return new_arr;
let str = arr.pop();
console.log(str);
console.log("Push returns Length", new_arr.push(str))
return capitalizeFirst(arr, new_arr.push(str));
}
function correctCapitalizeFirst(arr, new_arr) {
console.log("Type of new_arr : ",typeof(new_arr),":", new_arr);
if (arr.length === 0) return new_arr;
let str = arr.pop();
console.log(str);
new_arr.push(str);
return correctCapitalizeFirst(arr, new_arr);
}
console.log("--------------- Correct -----------------");
correctCapitalizeFirst(['car','taco','banana'], []);
console.log("--------------- Incorrect ---------------");
capitalizeFirst(['car','taco','banana'], []);