位置: 编程技术 - 正文

JS中取二维数组中最大值的方法汇总(js取二维数组数组的值)

编辑:rootadmin

推荐整理分享JS中取二维数组中最大值的方法汇总(js取二维数组数组的值),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js中取二维数组的值,js中二维数组的遍历,js中取二维数组最大值,js取二维数组数组的值,js取二维数组中某一列的值,js中取二维数组的最小值,js中取二维数组的值,js中取二维数组最大值,内容如对您有帮助,希望把文章链接给更多的朋友!

在JavaScript中可以通过内置的 Math.max() 的最大值,但是要从多重数组中取出最大值,还是有一定的难度。

问题描述

假设你有一个数组,而且这个数组中包含了数字的子数组,而我们要做的是从数组中的每个子数组中返回其最大的那个最大数。

基本解决方案

上面的方法是一个普通的解决方案,通过两个 for 循环对数组及其子数组做遍历:

创建一个 results 变量用来存储每个子数组中遍历出来的最大值

创建外循环 for 遍历外层数组

创建第二个变量 largestNumber 用来存放最大值。这个变量值必须放在内部 for 循环的外面,因为这样他才不会被重新分配

创建第二个 for 循环,来遍历子数组中的每个元素

通过一个 if 语句来判断当前子数组的元素是否大于当前存储的最大值 largestNumber 。如果是( true ),将这个最大值存储给 largestNumber 。

内部循环结束后,将每个子数组中的最大值存储到最初声明的变量 results 中

最后返回 results 数组

取出所有子数组中的每个最大值之后,得到一个新数组 results ,这个时候只需要通:

就可以得到其中的最大值。

中级解决方案

在外层数组中使用 Array.prototype.map() 方法遍历数组。使用 map() 方法遍历数组,会调用一个回调函数,在这个回调函数中,使用 reduce() 方法对每个子数组 group 进行合并,将值返回到一个新数组中。而在使用 reduce() 方法时,同样会调用一个回调函数,这个回调函数只做了一件事情,就是子数组中的元素做为比较,如果 current 大于 prev ,将会返回 current ,否则返回 prev ,最终得到每个子数组中最大值。

和前面一样,通过 Math.max.apply() 最终得到最大值。

JS中取二维数组中最大值的方法汇总(js取二维数组数组的值)

最佳解决方案

这个方案,使用 Function.bind 方法创建一个特殊的回调函数,就类似于 Math.max 方法一样,但其有一个 Function.prototype.apply 功能,将数组作为它的参数。

先对主数组中的每个元素做遍历,也就是数组内部的每个子数组

使用 map() 方法需要一个回调函数,用来找出内部每个数组中的最大值。需要创建一个函数,让 Math.max 能接受输入的数组工作。换句话说,这是非常简单而且这样工作也非常的好,如 Math.max([9,,,6]); 将会返回最大值

Function.prototype.apply 方法工作可以接受数组做为参数,但函数通过调用上下文,这事情就有点复杂。例如 Math.max.apply(null,[9,,,6]) 将调用一个 Max.max 方法,但这样的方法找起来不容易。

这里给 Function.prototype.apply 方法传递了一个 null 参数,告诉 Math.max 不需要任何上下文。

因为 arr.map() 需要一个回调函数,而不只是一个表达式,我们在 Function.bind 方法中提供了一个函数

因为 Function.prototype.apply 是一个静态方法,类似一个函数对象,我们可以称之为 Function.prototype.apply 上绑定了一个 Function.prototype.bind 。例如: Function.apply.bind

现在可以通过 Function.prototype.apply.bind 回调函数指定其上下文,比如在这个示例中的 Math.max 方法

由于是嵌入到 Function.prototype.apply 方法,需要一个上下文作为第一个参数,而且这个上下文还是一个虚假的。

所以我们将 null 作为第二个参数传递给 Function.prototype.apply.bind ,并且绑定一个上下文,这个上下文就是 Math.max 方法

由于 Math.max 是独立于任何上下文的,所以它会忽略 Function.prototype.apply 方法调用的虚假上下文

我们使用 Function.prototype.apply.bind(Math.max,null) 让一个新函数接受 arr.map 值,比如数组中的子数组

多维数组中取最大值

上文使用不同的方法实现了从二维数组中取出子数组中最大值,并且将这些最大值重新组成一个新数组,如果延伸一下,取出里面的最大值时,还需要使用 Array.prototype.max 函数,函数中通过 Math.max.apply({},this) 取得最大值。不过如果不是二维数组,那上述方法将无法取出数组中最大的值。

而在多维数组中取最大值,可以通过 join() 和 split() 方法组合在一起:

同样可以使用类似的方法取出多维数组中的最小值:

总结

在《 JavaScript学习笔记:取数组中最大值和最小值 》一文中介绍了使用 Math.max.apply({},arr) 来取数组中最大的数字。这篇文章中从不同的角度的介绍了如何在二维数组中取出最大的数,但很多时候,数组还有多维数组,文章最后介绍了如何实现多维数组中取出最大值。如果您有更多的方案,欢迎在评论中与我们一起分享。

js组件SlotMachine实现图片切换效果制作抽奖系统 前言:前两天在网上找组件,无意中发现了我们儿时游戏机效果的SlotMachine组件,浏览一遍下来,勾起了小时候满满的回忆。下面就带着大家来看看这么

JS区分浏览器页面是刷新还是关闭 Web开发者在系统开发中经常要面对产品经理各式各样的需求,当然,大部分对产品体验还是有帮助的,例如我们今天提到的刷新页面,前进后退,关闭

JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法 本文实例讲述了JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法。分享给大家供大家参考,具体如下:setTimeout用于延时器,只执行一次.setIn

标签: js取二维数组数组的值

本文链接地址:https://www.jiuchutong.com/biancheng/373462.html 转载请保留说明!

上一篇:JS组件Bootstrap ContextMenu右键菜单使用方法(js开发组件)

下一篇:js组件SlotMachine实现图片切换效果制作抽奖系统(Js组件开发方式)

  • 未开具的增值税专用发票怎么作废
  • 个人物品出售要交哪些税
  • 扣非净利润为什么比净利润低
  • 企业收入为0要报企业所得税吗
  • 出售无形资产计入资产处置损益
  • 跨月作废增值税专用发票
  • 冲红发票怎么填写信息
  • 管理费用期末有余额么
  • 营改增后房地产企业账务处理
  • 小规模购买税盘的费用可以抵税吗
  • 房屋赠与时契税的计税依据
  • 采暖费报销发票
  • 存货置换固定资产
  • 开外管证再省外预缴税收要怎么报税?
  • 项目所在地怎么填
  • 海关进口货物如何消杀
  • 增值税专用发票抵扣期限
  • 电话费发票可以重新开吗
  • 一般纳税人选择简易计税进项税可以抵扣吗
  • 工程发票的备注栏
  • 小规模纳税人出租不动产税率是5%还是3%
  • 预缴税款多缴了怎么办
  • 公司变卖废纸也需要缴税
  • 建筑业异地预缴增值税
  • 小规模银行存款多笔小金额财务费用可以合并记账吗?
  • 我的初级备考经验怎么写
  • 发票开负数冲红做什么会计分录?
  • 对方公司只能开发票吗
  • mac怎么连接校园网网线
  • 公积金补缴上月算断缴吗
  • w10纯净版系统怎么样
  • php数组有哪几种类型
  • thinkphp 3.2.3 getshell
  • linux的用法
  • 车辆购买保险发票未回怎么做会计分录
  • 斑鹿,滕波尔国家公园,印度 (© Ondrej Prosicky/Shutterstock)
  • 缴纳租房押金会被骗吗
  • 房地产销售老项目增值税
  • 电力安装公司都有什么业务
  • es6的module模块
  • 成本法处置子公司丧控合并层面
  • php解析json对象
  • 存货采购成本有余额吗
  • 销售自己使用过的物品的税率
  • 经营租赁出租方的会计处理
  • 物流企业会计核算的具体内容包括
  • 租金发票的税率多少
  • 帝国cms真的很好用
  • 生产车间劳务费会计分录
  • 其他收益算主营业务收入吗
  • 航空公司可以开发票吗
  • 独资企业的税收政策
  • 如何查询继续教育
  • 企业成本计算的依据是什么
  • 预付费用款项现金流量怎么算
  • 银行账户是不是卡号
  • 建筑业异地预缴个税税率
  • 劳动者权益包含哪些
  • mysql日期用什么数据类型
  • windows使用痕迹是指是什么
  • mmc不能打开文件win10
  • mac蓝牙连接iphone有什么用
  • fedora14虚拟机安装教程
  • 富士通FUJITSU笔记本电脑开机进入BIOS的方法(F2)
  • smsmon32.exe - smsmon32是什么进程
  • 遮罩层在上还是在下
  • js excel导入导出
  • jQuery+PHP实现可编辑表格字段内容并实时保存
  • cmd命令行
  • nodejs readfile
  • jquery的方法有哪些
  • fragment中嵌套fragment
  • 基于mvc的项目实例
  • js添加一个div
  • python按位与操作
  • 安卓使用icloud
  • 社保欠费税务催缴
  • 退休人员还写工作单位吗
  • 公司注销报税怎么申报
  • 生育登记网上服务大厅山东
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设