


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JS中取二维数组中最大值的方法汇总本文通过三种解决方案给大家介绍js中取二维数组中最大值的方法。介绍的非常详细,具有参考价值在JavaScript 中可以通过内置的 Math.max 的最大 值,但是要从多重数组中取出最大值,还是有一定的难度。问题描述假设你有一个数组,而且这个数组中包含了数字的子数 组,而我们要做的是从数组中的每个子数组中返回其最大的 那个最大数。基本解决方案function largestOfFour(arr) var results = ; /创建一个results 变量来存储/创建一个外层循环,遍历外层数组for (var n = 0; nvar largestNumb
2、er = 0; II 创建第二个变量,存储最大的数II创建另一个循环,遍历子数组for (var sb = 0; sbII检查子数组的元素是否大于当前存储的最大值if (arrnsb > largestNumber) II 如果为真,将这个值赋予给变量largestNumberlargestNumber = arrnsb;/内部循环后,将每个子数组中的值保存到数组results 中resultsn = largestNumber;/返回数组return results;largestOfFour(1,34,456,2,3,44,234,4567,1,4,5, 6,34,78,23,1);
3、 /34, 456, 4567, 78上面的方法是一个普通的解决方案,通过两个for 循环对数组及其子数组做遍历:创建一个results变量用来存储每个子数组中遍历出来的最大值创建外循环for遍历外层数组创建第二个变量 largestNumber 用来存放最大值。这 个变量值必须放在内部 for 循环的外面,因为这样他才不 会被重新分配创建第二个for 循环,来遍历子数组中的每个元素通过一个if语句来判断当前子数组的元素是否大于当前存储的最大值largestNumber。如果是(true ),将这个最大值存储给largestNumber 。内部循环结束后,将每个子数组中的最大值存储到最初声明的
4、变量results 中最后返回results 数组取出所有子数组中的每个最大值之后,得到一个新数组results ,这个时候只需要通:Atotype.max = function return Math.max.apply(,this);largestOfFour(arr).max ;就可以得到其中的最大值。largestOfFour(1,34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1).max ; / 4567中级解决方案function largestOfFour (arr) /通过map方法,并通过回调函数,将子数组中最大 值组合在一起
5、,得到一新数组return arr.map(function (group) /通过reduce方法,把每个子数组中最大值返回到group数组中return group.reduce(function (prev, current) / 如果 current 大于 prev,返回 current,否则返回prevreturn (current > prev) ? current : prev;););largestOfFour(1,34,456,2,3,44,234,4567,1,4,5, 6,34,78,23,1); / 34, 456, 4567, 78在外层数组中使用Array.p
6、rototype.map 方法遍历数组。使用map方法遍历数组,会调用一个回调函数,在 这个回调函数中,使用reduce方法对每个子数组group进行合并,将值返回到一个新数组中。而在使用reduce 方法时,同样会调用一个回调函数,这个回调函数只做了一件 事情,就是子数组中的元素做为比较,如果current 大于prev,将会返回current ,否则返回prev ,最终得到每 个子数组中最大值。和前面一样,通过 Math.max.apply最终得到最大值。最佳解决方案function largestOfFour (arr) return arr.map(Function.apply.bin
7、d(Math.max,null); largestOfFour(1,34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1); 34, 456, 4567, 78这个方案,使用 Function.bind方法创建一个特殊的回调函数,就类似于Math.max 方法一样,但其有一个Ftotype.apply功能,将数组作为它的参数。先对主数组中的每个元素做遍历,也就是数组内部的每个子数组使用map方法需要一个回调函数,用来找出内部每个数组中的最大值。需要创建一个函数,让Math.max能接受输入的数组工作。换句话说,这是非常简单而且这样工作也非常的
8、好,如Math.max(9,43,20,6);将会返回最大值43Ftotype.apply方法工作可以接受数组做为参数,但函数通过调用上下文,这事情就有点复杂。例如 Math.max.apply(null,9,43,20,6)将调用一个Max.max方法,但这样的方法找起来不容易。这里给 Ftotype.apply方法传递了一个null参数,告诉 Math.max不需要任何上下文。因为arr.map需要一个回调函数,而不只是一个表达式,我们在Function.bind方法中提供了一个函数因为 Ftotype.apply是一个静态
9、方法,类似一个函数对象,我们可以称之为 Ftotype.apply上 绑 定 了 一 个Ftotype.bind。例女口 : Function.apply.bind现在可以通过 Ftotype.apply.bind回调函数指定其上下文,比如在这个示例中的Math.max方法由于是嵌入至U Ftotype.apply 方法,需要 一个上下文作为个参数,而且这个上下文还是一个虚假的。所以我们将 null 作为第二个参数传递给Ftotype.apply.bind,并且绑定一个上下文,这个上下
10、文就是 Math.max 方法由于Math.max是独立于任何上下文的,所以它会忽略Ftotype.apply方法调用的虚假上下文我们使用Ftotype.apply.bind(Math.max,null)让一个新函数接受arr.map 值,比如数组中的子数组多维数组中取最大值上文使用不同的方法实现了从二维数组中取出子数组中最大值,并且将这些最大值重新组成一个新数组,如果延 伸一下,取出里面的最大值时,还需要使用 Atotype.max函 数, 函 数 中 通 过Math.max.apply(,this)取得最大值。不过如果不是二维数组
11、,那上述方法将无法取出数组中最大的值。而在多维数组中取最大值,可以通过join方法组合在一起:function largestOfFour (arr) var newArray = arr.join(",").split(",");return Math.max.apply(,newArray);largestOfFour(12,23); / =>23 largestOfFour(12,23,1234,324,345,566);=>1234largestOfFour(12,23,1234,324,23121,90890,345, 566,34
12、5,78,90); / =>90890largestOfFour(12,23,1234,324,23121,90890,345, 566,345,78,90,90909090,988); / =>90909090同样可以使用类似的方法取出多维数组中的最小值function smallerOfFour (arr) var newArray = arr.join(",").split(",");return Math.min.apply(,newArray);和 split/smallerOfFour(12,23); / =>12smallerOfFour(112,23,1234,324,345,566); /=>23smallerOfFour(212,123,1234,324,23121,90890,345.566, 345,78,90); / =>78smallerOfFour(102,230,1234,324,23121,90890,345.566,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建亿力集团有限公司所属单位生招聘98人第三批考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025年宁波余姚市人民医院医共体第一次招聘编外人员16人考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025年洛阳博物馆人才引进考前自测高频考点模拟试题及答案详解1套
- 2025年阆中市公开引进高层次医疗卫生人才(10人)模拟试卷及答案详解(夺冠系列)
- 2025北京大学大数据分析与应用技术国家工程实验室招聘1名劳动合同制工作人员考前自测高频考点模拟试题及答案详解(易错题)
- 2025广东惠州市惠阳区教育局选调下属事业单位工作人员15人考前自测高频考点模拟试题及答案详解(新)
- 2025包头市喜桂图文化旅游开发有限公司招聘讲解员15人考前自测高频考点模拟试题及答案详解(易错题)
- 协议书触发倒车
- 协议书玻璃应用
- 违反协议书的罪
- 《电流表及正确使用》课件
- (北师大版)2024-2025学年九年级数学上学期期中测试卷
- 工程施工项目个人合伙协议书
- HGT 4686-2014 液氨泄漏的处理处置方法
- 《答谢中书书》教学设计
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 愚公移山说课稿讲解课件
- 《城市的起源与发展》课件
- 4.CSR社会责任法律法规合规性评价表
- 小学生解决万以内退位减法错误类型及影响研究
- GB/T 14294-2008组合式空调机组
评论
0/150
提交评论