javascript中求二维数组最小值(javascript实现数组最大值和最小值的6种方法)
javascript中求二维数组最小值
javascript实现数组最大值和最小值的6种方法给定一个数组[1,8,5,4,3,9,2],编写一个算法,得到数组的最大值 9,和最小值 1。
1、通过prototype属性扩展min()函数和max()函数算法1的思路是在自定义min()和max()函数中,通过循环由第一个值依次与后面的值作比较,动态更新最大值和最小值,从而找到结果。
// 最小值 Array.prototype.min = function () { let min = this[0]; let len = this.length; for (let i = 1; i < len; i++) { if (this[i] < min) min = this[i] } return min } // 最大值 Array.prototype.max = function () { let max = this[0]; let len = this.length; for (let i = 1; i < len; i++) { if (this[i] > max) max = this[i] } return max } // 结果 console.log(arr.min()); // 1 console.log(arr.max()); // 9
算法2的主要思路是通过apply()函数改变函数的执行体,将数组作为参数传递给apply()函数。这样数组就可以直接调用Math对象的min()函数和max()函数来获取返回值。
Array.min = function(array) { return Math.min.apply(Math, array) } // 最大值 Array.max = function (array) { return Math.max.apply(Math, array) } // 结果 console.log(Array.min(arr)); // 1 console.log(Array.max(arr)); // 9
在算法2中将min()函数和max()函数作为Array类型的静态函数,但不支持链式调用,我们可以利用对象字面量进行简化。
// 最小值 Array.prototype.min = function() { return Math.min.apply({}, this) } // 最大值 Array.prototype.max = function () { return Math.max.apply({}, this) } // 结果 console.log(arr.min()); // 1 console.log(arr.max()); // 9
与算法2不同的是,在验证时,因为min()函数和max()函数属于实例方法,所以可以直接通过数组调用。
上面的算法代码中apply()函数传入的第一个值为{},实际表示当前执行环境的全局对象。第二个参数this指向需要处理的数组。
由于apply函数的特殊性第一个参数,指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。所以我们也可以将第一个参数设置为null、undefind。
算法4的主要思想是reduce()函数不设置initialValue初始值,将数组的第一个元素直接作为回调函数的第一个参数,依次与后面的值进行比较。当需要找最大值时,每轮累加器返回当前比较中大的值;当需要找最小值时,每轮累加器返回当前比较中小的值。
// 最小值 Array.prototype.min = function () { return this.reduce((pre, cur) => { return pre < cur ? pre : cur }) } // 最大值 Array.prototype.max = function () { return this.reduce((pre, cur) => { return pre > cur ? pre : cur }) } // 结果 console.log(arr.min()); // 1 console.log(arr.max()); // 9
算法5的主要思想时借助数组的原生sort()函数对数组进行排序,排序完成后首尾元素即是数组的最小、最大元素。
默认的sort()函数在排序时时按照字母顺序排序的,数字会被按照字符串处理。例如数字 18 会被当做"18"处理,数字 6 被当"6"来处理,在排序时是按照字符串的每一位进行比较的,因为"1"比"6"要小,所以"11"排序时要比"6"小。对于数值类型的数组来说,这显然不合理。所以我们需要进行自定义排序。
let sortArr = arr.sort((a, b) => a - b) // 最小值 sortArr[0] // 最大值 sortArr[sortArr.length - 1] // 结果 console.log(sortArr[0]); // 1 console.log(sortArr[sortArr.length - 1]); // 9
// 最小值 Math.min(...arr) // 最大值 Math.max(...arr) // 结果 console.log(Math.min(...arr)); // 1 console.log(Math.max(...arr)); // 9
到此这篇关于javascript实现数组最大值和最小值的6种方法的文章就介绍到这了,更多相关javascript 数组最大值和最小值内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- javascript变量值做函数名(JavaScript中变量提升和函数提升实例详解)
- javascript五大继承方式(原生Javascript实现继承方式及其优缺点详解)
- html基础知识javascript(JavaScript+html实现前端页面滑动验证)
- ASP.NET使用JavaScriptSerializer实现序列化与反序列化
- javascript设置鼠标(JavaScript实现鼠标控制自由移动的窗口)
- javascript检测内容改变了(JavaScript 检测文件的类型的方法)
- js搜索功能的实现(前端JavaScript实现本地模糊搜索功能的方法实例)
- javascript写游戏脚本(原生JS实现飞机大战小游戏)
- 最全js面试题(JavaScript必看的10道面试题总结推荐)
- js中事件的三个阶段(JavaScript中事件冒泡机制示例详析)
- js防抖用法(JavaScript的防抖和节流案例)
- javascript 经典算法(JavaScript实现的七种排序算法总结推荐!)
- javascript怎么判断对象类型(JavaScript对象内置对象,值类型和引用类型讲解)
- JavaScript脚本数据类型
- javascript对象添加方法(详解JavaScript面向对象实战之封装拖拽对象)
- jspromise原理(JavaScript使用promise处理多重复请求)
- 一个30岁男人外遇失败的全过程(一个30岁男人外遇失败的全过程)
- 《无敌破坏王2》 不聊彩蛋,聊聊我从动画里看到的现实那些事儿(无敌破坏王2不聊彩蛋)
- 《寄生虫》 三观不正 人类悲欢从来不相通,感同身受也并非本能(寄生虫三观不正)
- 这部动漫中的女孩子,可比101女孩更加励志(这部动漫中的女孩子)
- 《白狐的人生》热拍 贾征宇偶像包袱难自弃 图(白狐的人生热拍)
- 七夕取消了,牛郎织女没做核酸七夕已经取消(牛郎织女没做核酸七夕已经取消)
热门推荐
- 如何判别云服务器的优劣(选用云服务器的这四大风险必须知道)
- SQL Server作业活动监视器
- docker指令详解(docker create命令的用法说明)
- sqlserver2012卸载工具(Windows下SQL Serever 2012彻底卸载删除教程)
- laravel验证码依赖(laravel5.2表单验证,并显示错误信息的实例)
- python对mysql数据分析(python使用adbapi实现MySQL数据库的异步存储)
- sql重复记录怎么删除(SQL去除重复记录七种)
- nginx跨域怎么用(如何利用map实现Nginx允许多个域名跨域)
- mysql统计下个月过生日的人数(Mysql出生日期转换为年龄并分组统计人数的方法示例)
- kubernetes云(云原生技术kubernetesK8S简介)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9