Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么;Array.prototype.slice(参数)";给了我一个空的“;[]是什么;?_Javascript_Arrays_Filter_Arguments - Fatal编程技术网

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
    ,这让我很困惑

  • 函数getMax(){ “严格使用”; 设filterMax=函数(arr){ 设maxValue=arr[0]; 让resultar=arr.filter(函数(值){ 返回值>最大值; }); if(resultArr.length==0){ 返回maxValue;//输出:7 }否则{ resultar=filterMax(resultar); } }; 设args=Array.from(参数);//输出:[3,7,2,5,1,4] //设args=Array.prototype.slice(参数);//输出:[] console.log(args);//输出:[] 返回filterMax(args);//输出:未定义 } log(getMax(3,7,2,5,1,4))//输出:未定义
  • 您需要使用
    call
    将参数转换为实数数组
  • 其次,您正在从
    getMax
    返回
    filterMax
    ,但您正在从
    filterMax
    返回任何内容。您需要返回
    resultar
  • 函数getMax(){ “严格使用”; 设filterMax=函数(arr){ 设maxValue=arr[0]; 让resultar=arr.filter(函数(值){ 返回值>最大值; }); if(resultArr.length==0){ 返回maxValue;//输出:7 }否则{ resultar=filterMax(resultar); } 返回结果器; }; //设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))//输出:未定义的您的
    参数
    是一个
    对象
    ,而不是
    数组
    。它使用
    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);