返回数组中的最大值,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));的主要内容,如果未能解决你的问题,请参考以下文章