JavaScript 数组排序方法及查找最大值最小值方法

  • 1. sort()方法排序
    • 1.1 方法介绍
    • 1.2 语法:arr.sort([compareFunction])
    • 1.3 参数说明
    • 1.4 返回值: 排序后的数组。
    • 1.5 方法描述
  • 2. 最大值/最小值方法
    • 2.1 查找数组中的最大值
      • 2.1.1 Math.max.apply()方法
        • 语法:Math.max.apply(null, arr)
        • 参数说明:
      • 2.1.2 自定义算法
    • 2.2 查找数组中的最小值
      • 2.2.1 Math.min.apply()方法
        • 语法:Math.min.apply(null, arr)
        • 参数说明:
      • 2.2.2 自定义方法

1. sort()方法排序

1.1 方法介绍

sort()方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。

由于它取决于具体实现,因此无法保证排序的时间和空间复杂性。

1.2 语法:arr.sort([compareFunction])

1.3 参数说明

  • compareFunction 可选,用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。

    • firstEl,第一个用于比较的元素。
    • secondEl,第二个用于比较的元素。

1.4 返回值: 排序后的数组。

注意: 数组已原地排序,即会改变原数组,并且不进行复制。

1.5 方法描述

如果没有指明 compareFunction,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。
例如 “Banana” 会被排列到 “cherry” 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 “80” 要比 “9” 要靠前。

如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
  • compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

所以,比较函数格式如下:

function compare(a, b) {if (a < b ) {           // 按某种排序标准进行比较, a 小于 breturn -1;}if (a > b ) {return 1;}// a must be equal to breturn 0;
}

要比较数字而非字符串,比较函数可以简单的以 a 减 b,如下的函数将会将数组升序排列:

function compareNumbers(a, b) {return a - b;
}

sort 方法可以使用 函数表达式 方便地书写:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {return a - b;
});
console.log(numbers);
// 控制台输出:[1, 2, 3, 4, 5]

对象可以按照某个属性排序:

var items = [{ name: 'Edward', value: 21 },{ name: 'Sharpe', value: 37 },{ name: 'And', value: 45 },{ name: 'The', value: -12 },{ name: 'Magnetic' },{ name: 'Zeros', value: 37 }
];// sort by value 对数值进行排序
items.sort(function (a, b) {a.value = a.value ? a.value : 0;b.value = b.value ? b.value : 0;return (a.value - b.value)
});// sort by name 对字符串进行排序
items.sort(function(a, b) {var nameA = a.name.toUpperCase(); // ignore upper and lowercasevar nameB = b.name.toUpperCase(); // ignore upper and lowercaseif (nameA < nameB) {return -1;}if (nameA > nameB) {return 1;}// names must be equalreturn 0;
});

注意: 对象按照某个属性进行排序时,需要对该属性是否存在进行判断,若该属性不存在,则需要在其所在的对象上添加该属性并为其设定默认的属性值,否则在排序时,不存在该属性的对象之后的数据不会参与排序操作。

参考文档: MDN Array.prototype.sort()


2. 最大值/最小值方法

2.1 查找数组中的最大值

2.1.1 Math.max.apply()方法

语法:Math.max.apply(null, arr)

参数说明:

  • 第一个参数传null,因为没有对象来调用它。
  • 第二个参数传一个数组。

apply()方法可以将数组转换成参数列表。第二个参数必须是由能转换成number类型的数值组成的数组。

2.1.2 自定义算法

function searchArrayMax(arr) {var len = arr.lengthvar max = arr[0];while (len--) {if (arr[len] > max) {max = arr[len];}}return max;
}

2.2 查找数组中的最小值

2.2.1 Math.min.apply()方法

语法:Math.min.apply(null, arr)

参数说明:

  • 第一个参数传null,因为没有对象来调用它。
  • 第二个参数传一个数组。

apply()方法可以将数组转换成参数列表。第二个参数必须是由能转换成number类型的数值组成的数组。

2.2.2 自定义方法

function myArrayMin(arr) {var len = arr.lengthvar min = arr[0];while (len--) {if (arr[len] < min) {min = arr[len];}}return min;
}

—— END ——

JavaScript 数组排序及查找数组中最大值最小值方法相关推荐

  1. 图解|查找数组中最大值的5种方法!

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 我们在一些特定场景下,例如查询公司员工的最高薪资,以及班级的最高成绩又或者是面试中 ...

  2. es6 数组找最大值_JavaScript 查找数组中最大值与最小值

    最小值算法如下: 将数组中第一个元素赋值给一个变量,把这个变量作为最小值: 开始遍历数组,从第二个元素开始依次和第一个元素进行比较: 如果当前的元素小于当前的最小值的话,就把当前的元素值赋值给最小值: ...

  3. javascript学习系列(1):数组中的map方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

  4. javascript学习系列(17):数组中的find方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

  5. javascript学习系列(18):数组中的include方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

  6. javascript学习系列(15):数组中的lastIndexOf方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

  7. javascript学习系列(4):数组中的some方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

  8. javascript学习系列(3):数组中的foreach方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

  9. javascript学习系列(13):数组中的concat方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

最新文章

  1. 收集Cocos2d提供的字体!共57种
  2. Mysql8.0.16 only_full_group_by
  3. Java变量的修饰符
  4. (转)Unity3d UnityEditor编辑器定制和开发插件
  5. idea没有错误提示的解决方法(一直处于错误分析中)
  6. photoshop改变图片大小,不改变像素
  7. 颜色(color)、字体(Fonts)管理(颜色的 hex 表示)
  8. OpenCV3.0-图像特征检测
  9. 软件测试基础知识整理(详细版)
  10. matlab polyval之后建立方程,[matalb]polyfit多项式拟合函数以及polyval
  11. 06_标识符的命名规则(笔试)
  12. win7系统桌面的东西不见了,提示您已使用临时配置文件登录
  13. 塑料回收标志相关知识
  14. 华为免费培养2000名大数据开发者!
  15. ipfs星际文件系统初体验
  16. Matlab学习总结
  17. 关于CrystalReportsy 9(水晶报表9)在VS2017上的使用
  18. 基于ARM处理器的无线SoC实现
  19. Activiti工作流引擎进阶【收藏可做笔记系列】
  20. 字符串对比(c语言)

热门文章

  1. 开源工程系列之讯飞VBOX改装蓝牙5.0(aptX HD)音箱
  2. GoAccess安装及分析nginx实时日志
  3. Python的闭包和装饰器
  4. ReentrantLock+线程池+同步+线程锁
  5. Linux篇---ftp服务器的搭建
  6. 1071. 小赌怡情(15)
  7. fwt优化+树形DP HDU 5909
  8. 数据结构(1)有序表查找
  9. java在继承中父类的成员变量是否会被子类所覆盖
  10. tiny210V2 Uboot kernel filesystem 烧写和启动