




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JS中取二维数组中最大值的方法汇总_ 本文通过三种解决方案给大家介绍js中取二维数组中最大值的方法。介绍的特别具体,具有参考价值 在JavaScript中可以通过内置的 Math.max() 的最大值,但是要从多重数组中取出最大值,还是有肯定的难度。 问题描述 假设你有一个数组,而且这个数组中包含了数字的子数组,而我们要做的是从数组中的每个子数组中返回其最大的那个最大数。 基本解决方案 function largestOfFour(arr) var results = ; / 创建一个results变量来存储 / 创建一个外层循环,遍历外层数组 for (var n = 0; n arr.le
2、ngth; n+) var largestNumber = 0; / 创建其次个变量,存储最大的数 / 创建另一个循环,遍历子数组 for (var sb = 0; sb arrn.length; sb+) /检查子数组的元素是否大于当前存储的最大值 if (arrnsb largestNumber) / 假如为真,将这个值给予给变量largestNumber largestNumber = arrnsb; / 内部循环后,将每个子数组中的值保存到数组results中 resultsn = largestNumber; / 返回数组 return results; largestOfFour(
3、1,34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1); /34, 456, 4567, 78 上面的方法是一个一般的解决方案,通过两个 for 循环对数组及其子数组做遍历: 创建一个 results 变量用来存储每个子数组中遍历出来的最大值 创建外循环 for 遍历外层数组 创建其次个变量 largestNumber 用来存放最大值。这个变量值必需放在内部 for 循环的外面,由于这样他才不会被重新安排 创建其次个 for 循环,来遍历子数组中的每个元素 通过一个 if 语句来推断当前子数组的元素是否大于当前存储的最大值 largestNumber 。假如是
4、( true ),将这个最大值存储给 largestNumber 。 内部循环结束后,将每个子数组中的最大值存储到最初声明的变量 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
5、(); / 4567 中级解决方案 function largestOfFour (arr) / 通过map()方法,并通过回调函数,将子数组中最大值组合在一起,得到一新数组 return arr.map(function (group) / 通过reduce方法,把每个子数组中最大值返回到group数组中 return group.reduce(function (prev, current) / 假如current 大于prev,返回current,否则返回prev return (current prev) ? current : prev; ); ); largestOfFour(1,
6、34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1); / 34, 456, 4567, 78 在外层数组中用法 Atotype.map() 方法遍历数组。用法 map() 方法遍历数组,会调用一个回调函数,在这个回调函数中,用法 reduce() 方法对每个子数组 group 进行合并,将值返回到一个新数组中。而在用法 reduce() 方法时,同样会调用一个回调函数,这个回调函数只做了一件事情,就是子数组中的元素做为比较,假如 current 大于 prev ,将会返回 current ,否则返回 prev ,最终得到每个子数组中最大值。 和
7、前面一样,通过 Math.max.apply() 最终得到最大值。 最佳解决方案 function largestOfFour (arr) return arr.map(Function.apply.bind(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 功能,将数组作为它的参数。
8、 先对主数组中的每个元素做遍历,也就是数组内部的每个子数组 用法 map() 方法需要一个回调函数,用来找出内部每个数组中的最大值。需要创建一个函数,让 Math.max 能接受输入的数组工作。换句话说,这是特别简洁而且这样工作也特别的好,如 Math.max(9,43,20,6); 将会返回最大值 43 Ftotype.apply 方法工作可以接受数组做为参数,但函数通过调用上下文,这事情就有点简单。例如 Math.max.apply(null,9,43,20,6) 将调用一个 Max.max 方法,但这样的方法找起来不简单。 这里给 Ftotyp
9、e.apply 方法传递了一个 null 参数,告诉 Math.max 不需要任何上下文。 由于 arr.map() 需要一个回调函数,而不只是一个表达式,我们在 Function.bind 方法中供应了一个函数 由于 Ftotype.apply 是一个静态方法,类似一个函数对象,我们可以称之为 Ftotype.apply 上绑定了一个 Ftotype.bind 。例如: Function.apply.bind 现在可以通过 Ftotype.apply.bind 回调函数指定其上下文,比如在这个示例中的 M
10、ath.max 方法 由于是嵌入到 Ftotype.apply 方法,需要一个上下文作为第一个参数,而且这个上下文还是一个虚假的。 所以我们将 null 作为其次个参数传递给 Ftotype.apply.bind ,并且绑定一个上下文,这个上下文就是 Math.max 方法 由于 Math.max 是独立于任何上下文的,所以它会忽视 Ftotype.apply 方法调用的虚假上下文 我们用法 Ftotype.apply.bind(Math.max,null) 让一个新函数接受 arr.map 值,比如数组中
11、的子数组 多维数组中取最大值 上文用法不同的方法实现了从二维数组中取出子数组中最大值,并且将这些最大值重新组成一个新数组,假如延长一下,取出里面的最大值时,还需要用法 Atotype.max 函数,函数中通过 Math.max.apply(,this) 取得最大值。不过假如不是二维数组,那上述方法将无法取出数组中最大的值。 而在多维数组中取最大值,可以通过 join() 和 split() 方法组合在一起: function largestOfFour (arr) var newArray = arr.join(,).split(,); return Math.max.appl
12、y(,newArray); largestOfFour(12,23); / =23 largestOfFour(12,23,1234,324,345,566); / =1234 largestOfFour(12,23,1234,324,23121,90890,345,566,345,78,90); / =90890 largestOfFour(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); smallerOfFour(12,23); / =12 smallerOfFour(112,23,1234,324,345,566); / =23 smallerOfFour(212,123,1234,324,23121,90890,345,566,345,78,90); / =78 smallerOfFour(102,230,1234,324,23121,90890,34
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内墙粉刷包工合同样本
- 书面招标货物采购合同样本
- 如何利用大数据优化生产计划
- 出售肉牛批发合同样本
- 中介代签合同样本
- 个人转让住房合同范例
- 图书选题计划
- 农场采购化肥合同标准文本
- 2025如何签订正规的租赁合同
- 2025租赁会议室合同协议范本
- 网络零售行业分析
- 屋顶光伏发电系统设计原则与方案
- 保安上墙制度
- 2025念珠菌病诊断和管理全球指南解读课件
- 碘对比剂应用护理安全性
- 水电站安全生产培训
- 2025年国家药品监督管理局特殊药品检查中心招聘6人历年高频重点提升(共500题)附带答案详解
- 《矿井提升设备》课件2
- 被迫解除劳动合同通知书电子邮件
- 工具表单-岗位价值评估表(海氏)
- DB33T 2515-2022 公共机构“零碳”管理与评价规范
评论
0/150
提交评论