Javascript Array.push的Array.push抛出类型错误不是函数
这是我的密码。目标是通过这个练习练习递归。我为函数提供以下参数Javascript Array.push的Array.push抛出类型错误不是函数,javascript,arrays,Javascript,Arrays,这是我的密码。目标是通过这个练习练习递归。我为函数提供以下参数 capitalizeFirst(['car','taco','banana',[]) 新的_arr显然是一个数组。为什么push方法对它不起作用?另外,当我将返回语句更改为 首先返回(arr,[].push(str)) 随着chrome调试器的出现,数字1不断传递到数组,而不是arr.pop()值。是什么导致了这种行为?我还没有在实现中添加首字母大写。这只是我的push方法中的一个replace()调用,以防有人想知道为什么我的代码
capitalizeFirst(['car','taco','banana',[])代码>
新的_arr显然是一个数组。为什么push方法对它不起作用?另外,当我将返回语句更改为
首先返回(arr,[].push(str))代码>
随着chrome调试器的出现,数字1不断传递到数组,而不是arr.pop()值。是什么导致了这种行为?我还没有在实现中添加首字母大写。这只是我的push方法中的一个replace()调用,以防有人想知道为什么我的代码没有执行方法名称所宣称的操作
感谢W3C提供的任何帮助:
方法将新项添加到数组的末尾,并返回新的长度
第一个循环应该可以,但是因为您递归地传递.push
,第二个循环看到的是一个数字而不是一个数组,因为push
返回一个数字
按自己的线路,然后将新的作为参数传递
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));
}
来自W3C:
方法将新项添加到数组的末尾,并返回新的长度
第一个循环应该可以,但是因为您递归地传递.push
,第二个循环看到的是一个数字而不是一个数组,因为push
返回一个数字
按自己的线路,然后将新的作为参数传递
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));
}
基本上,您的错误主要是因为push()
在将元素推送到数组上后返回数组的长度,而这将作为递归调用的参数而不是数组传递:
push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度
下面将提供一个简单的修复:
功能首字母大写(arr、新arr)
{
如果(arr.length==0)
返回新的_arr;
设str=arr.pop();
//添加了首字母大写的代码。
str=str.charAt(0.toUpperCase()+str.slice(1);
新推送装置(str);
首先返回(arr、新arr);
}
log(大写字母第一(['car','taco','banana',[])代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装器{max height:100%!important;top:0;}
基本上,您的错误主要是因为push()
在将元素推送到数组上后返回数组的长度,而这将作为递归调用的参数而不是数组传递:
push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度
下面将提供一个简单的修复:
功能首字母大写(arr、新arr)
{
如果(arr.length==0)
返回新的_arr;
设str=arr.pop();
//添加了首字母大写的代码。
str=str.charAt(0.toUpperCase()+str.slice(1);
新推送装置(str);
首先返回(arr、新arr);
}
log(大写字母第一(['car','taco','banana',[])代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
.as console wrapper{max height:100%!important;top:0;}
如果您console.log(typeof new\u arr)
您得到的答案是number
原因是arr.push()
的返回值是该值被推送到的索引,而不是新数组。因此,如果您这样做,您的作品:
function capitalizeFirst(arr, new_arr) {
if (arr.length === 0) return new_arr;
let str = arr.pop();
console.log(str);
new_arr.push(str); // the return of .push is the array length, which is not needed.
return capitalizeFirst(arr, new_arr); // pass the full array into this function, making it recursive
}
(请参见返回值部分)如果您console.log(typeof new\u arr)
您将得到编号作为答案
原因是arr.push()
的返回值是该值被推送到的索引,而不是新数组。因此,如果您这样做,您的作品:
function capitalizeFirst(arr, new_arr) {
if (arr.length === 0) return new_arr;
let str = arr.pop();
console.log(str);
new_arr.push(str); // the return of .push is the array length, which is not needed.
return capitalizeFirst(arr, new_arr); // pass the full array into this function, making it recursive
}
(参见返回值部分)
push()方法将一个或多个元素添加到数组的末尾,然后
返回数组的新长度
功能首字母大写(arr、新arr){
日志(“新阵列的类型:”,类型(新阵列),“:”,新阵列);
if(arr.length==0)返回新的\u arr;
设str=arr.pop();
console.log(str);
日志(“推送返回长度”,新的推送(str))
首先返回(arr,新arr.push(str));
}
功能优先(arr、新arr){
日志(“新阵列的类型:”,类型(新阵列),“:”,新阵列);
if(arr.length==0)返回新的\u arr;
设str=arr.pop();
console.log(str);
新推送装置(str);
首先返回(arr、新arr);
}
console.log(“--------------正确----------------”);
首先(['car','taco','banana',[]);
console.log(“--------------不正确-----------------”;
首字母大写(['car','taco','banana',[])代码>
push()方法将一个或多个元素添加到数组的末尾,然后
返回数组的新长度
功能首字母大写(arr、新arr){
日志(“新阵列的类型:”,类型(新阵列),“:”,新阵列);
if(arr.length==0)返回新的\u arr;
设str=arr.pop();
console.log(str);
日志(“推送返回长度”,新的推送(str))
首先返回(arr,新arr.push(str));
}
功能优先(arr、新arr){
日志(“新阵列的类型:”,类型(新阵列),“:”,新阵列);
if(arr.length==0)返回新的\u arr;
设str=arr.pop();
console.log(str);
新推送装置(str);
首先返回(arr、新arr);
}
console.log(“--------------正确----------------”);
首先(['car','taco','banana',[]);
console.log(“--------------不正确-----------------”;
首字母大写(['car','taco','banana',[])代码>