Javascript 为什么;Array.prototype.slice(参数)";给了我一个空的“;[]是什么;?
我编写了一个函数Javascript 为什么;Array.prototype.slice(参数)";给了我一个空的“;[]是什么;?,javascript,arrays,filter,arguments,Javascript,Arrays,Filter,Arguments,我编写了一个函数getMax,它模拟Math.max,可以从一组数字中获得最大值。该函数接受变量参数 我使用Array.prototype.slice(arguments)将它们转换成一个真正的数组。但是我失败了,我得到了一个空数组[]。如果我使用Array.from(arguments)我将得到一个正确的数组。我不知道为什么传统的Array.prototype.slice(arguments)方法不适合我 这个函数的另一个问题是,在我得到一个正确的参数数组之后,getMax的返回值是undef
getMax
,它模拟Math.max,可以从一组数字中获得最大值。该函数接受变量参数
Array.prototype.slice(arguments)
将它们转换成一个真正的数组。但是我失败了,我得到了一个空数组[]。如果我使用Array.from(arguments)
我将得到一个正确的数组。我不知道为什么传统的Array.prototype.slice(arguments)
方法不适合我getMax
的返回值是undefined
,但是我在filterMax
函数中得到了一个返回值7
,这让我很困惑call
将参数转换为实数数组李>
getMax
返回filterMax
,但您正在从filterMax
返回任何内容。您需要返回resultar
log(getMax(3,7,2,5,1,4))//输出:未定义的您的
参数
是一个对象
,而不是数组
。它使用Array.prototype.slice.call(参数)
您还忘了在filterMax()函数中返回一个值
函数getMax(){
“严格使用”;
设filterMax=函数(arr){
设maxValue=arr[0];
让resultar=arr.filter(函数(值){
返回值>最大值;
});
if(resultArr.length==0){
返回maxValue;//输出:7
}否则{
resultar=filterMax(resultar);
//您忘了在这里返回值
返回结果器
}
};
//您的参数是一个对象,而不是数组
console.log('参数:',参数)
//设args=Array.from(参数);//输出:[3,7,2,5,1,4]
//如果您这样做,它会起作用:
设args=Array.prototype.slice.call(参数);//输出:[]
console.log(args);//输出:[]
返回filterMax(args);//输出:未定义
}
log(getMax(3,7,2,5,1,4))//输出:未定义
基本上与
[].slice(arguments)
(除了第一种情况下,此
是Array.prototype
,但这或多或少等于在空数组上调用它)
。。。这将返回一个空数组,因为从空数组进行切片将始终导致一个空数组。您可能想做:
Array.prototype.slice.call(arguments)
使用调用.slice
,而这个是参数
,因此它得到想要的数组,但我更喜欢数组。从(参数)
或[…参数]
,或者更好的是,一个rest参数:
function findMax(...numbers) {
//...
}
这个函数的另一个问题是,在我得到一个正确的参数数组之后,getMax的返回值是未定义的,但是我在filterMax函数中得到了一个返回值7,这让我很困惑
那是因为:
let maxValue = arr[0];
let resultArr = arr.filter(function(value) {
return value > maxValue;
});
过滤掉任何大于第一个的数组元素(在您的示例中,5和7大于3),因此代码进入else分支
resultArr = filterMax(resultArr);
。。。并且不返回任何内容(即未定义的代码)。你可能想
return filterMax(resultArr);
总而言之:
函数getMax(…数字){
函数过滤器最大值(数字){
const first=数字[0];
const biger=numbers.filter(函数(值){
返回值>第一;
});
如果(更大的长度==0){
先返回;
}否则{
返回过滤器最大值(更大);
}
};
返回过滤器最大值(数字);
}
log(getMax(3,7,2,5,1,4))//输出:7
[…参数]
?我想使用传统的方式Array.prototype.slice(参数)heregetMax,它模拟数学。max@mplungjan啊,对了,在回答之前应该先读一下问题:)@Jonaswillms谢谢你的解释,这帮助我对递归有了更多的理解。谢谢,@Maheer Ali,你真的很有帮助。谢谢你详细的解释,我从他们那里学到了很多。
return filterMax(resultArr);