返回数组中的最大值,var arr = [2, 4, 6, 8, 5, 0]; alert(Math.max.apply(this, arr));

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回数组中的最大值,var arr = [2, 4, 6, 8, 5, 0]; alert(Math.max.apply(this, arr));相关的知识,希望对你有一定的参考价值。

为什么这里要加上一个apply呢,初学js,不是很懂,麻烦可以将详细一些,谢谢

javascript中的函数是首席对象,强调函数也是对象,还是最重要的首席。

Math.max()是一个函数/静态方法。
对于var arr = [2, 4, 6, 8, 5, 0];
通常,看成函数,只需要var m=Math.max(arr);得到最大值。

而看成对象,“函数对象”有apply(对象,参数)的静态方法,作用等于以“参数”激发该“函数对象”运行。
Math.max.apply(this,arr); 这里的this代表对象max,激发max函数对象,传递以arr参数。
等价于写apply(Math.max, arr);等价于Math.max(arr);
参考技术A 这里apply对数组自动转换为一行形参去调用原函数。是个小小的技巧性的工作,输入参数形式的自动变换。有点类似python中的参数解元组操作. 参考技术B 1

使用展开语法返回数组中的最大数

【中文标题】使用展开语法返回数组中的最大数【英文标题】:Return Largest Number in Array using spread syntax 【发布时间】:2017-12-14 18:19:58 【问题描述】:

我正在尝试使用此函数在每个子数组中找到最大的数字:

/* jshint esversion: 6 */
function largestOfFour(arr) 
  var max=[];
  for(var i=0; i<arr.length; i++)
    for(var j=0; j<arr[i].length; j++)

     max.push(Math.max(...arr[j]));
    

  
  return max;



largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

但是当我运行它的时候,结果其实是每个子数组中最大的数,但是重复了4次,像这样:

[27,5,39,1001,27,5,39,1001,27,5,39,1001,27,5,39,1001]

我不知道为什么。我想知道我做错了什么,谢谢。

【问题讨论】:

我不明白,你想返回其中单个最大数字的数组吗? 您正在查找数组中的最大数字。另一个数组是数组数组。请注意,Math.max() 如图所示消耗了一个数组,因此不需要子循环,实际上,通过这样做,您将推送相同的数据 arr.length 删除第二个循环。 为什么不对每个数组进行排序,然后在length-1 索引处获取数字? @Aron 对不起,如果我不清楚,我正在尝试在每个子数组中找到最大的数字。 【参考方案1】:

你不需要第二个循环:

    /* jshint esversion: 6 */
    function largestOfFour(arr) 
      var max=[];
      for(var i=0; i<arr.length; i++)
         max.push(Math.max(...arr[i]));
      
      return max;
    
    
    console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

【讨论】:

【参考方案2】:

Array#map将数组转化为每个子数组的最大值:

function largestOfFour(arr) 
  return arr.map((sub) => Math.max(...sub));


console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

【讨论】:

【参考方案3】:

您也可以以 Haskellesque 模式匹配方式递归地执行以下操作;

function getLargests([x,...xs])
  return [Math.max(...x)].concat(xs.length ? getLargests(xs) : []);


var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
console.log(getLargests(arr));

【讨论】:

以上是关于返回数组中的最大值,var arr = [2, 4, 6, 8, 5, 0]; alert(Math.max.apply(this, arr));的主要内容,如果未能解决你的问题,请参考以下文章

返回数组中的最大值和删除数组重复值-排序

PHP数组函数

简单整理常见对数组字符串操作的封装

怎样用JS将一个数组内的元素平均分为两个数组

PHP实现删除数组中的特定元素

PHP实现删除数组中的特定元素