这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
上一篇文章学习了数组的遍历方法 forEach(), 但是还是有点小问题的. 还有map()方法. 另更多更文学习了 JavaScript 中的
本文来继续学习 JavaScript 中的排序方法: 在实际工作中经常用到排序算法-sort()
JavaScript sort()
我们在项目开发中, 或许每天都要面对处理数据, 而处理数据这个过程中, 对数据的排序是在程序中经常用到的算法。
排序算法
使用排序算法无论是快速排序还是冒泡排序, 排序的核心是通过比较两个元素的大小, 然后根据相关的规则进行处理后返回处理好的数据, 依次直到处理完毕。
可以直接比较数值, 而字符串或者两个对象该怎么处理? 所以将比较的过程通过函数抽象出来。
JavaScript 的 sort() 方法用来排序, 通过传递一个方法,对两个相邻元素进行比较, 根据传递的方法对两个元素进行定位(确定前后顺序)
在排序过程中每一次的比较: 对于两个元素 x 和 y, 如果认为 x < y, 则返回 -1, 如果认为 x == y, 则返回0, 如果认为 x > y, 则返回 1, 这样, 排序算法就不用关心具体的比较过程, 而是根据比较结果直接排序。
sort() 需要注意的坑
如果不给 sort()方法传递比较的参数会是什么样子?
// 正常的结果:
['Banana', 'Apple', 'Orange'].sort();
// ['Apple', 'Banana', 'Orange'];
// apple 排在了最后:
['Banana', 'apple', 'Orange'].sort();
// ['Banana', 'Orange", 'apple']
// 数值排序的坑:
[10, 20, 1, 2].sort();
// [1, 10, 2, 20]
我们可以通过给 sort()方法传递一个元素处理方法, 将其排序结果更加准确(按我们想要的结果来排序)
let arr = [10, 20, 1, 2]
arr.sort(function(a, b) {
return a - b
} )
console.log(arr) // [ 1, 2, 10, 20 ]
这里传递的方法函数 返回 a - b, 为升序排列, 如果 return b - a; 则为降序排列.
更多阅读
- 【Array.prototype.map() 】、
- 【JS-特殊符号-位运算符】、
- 【ES6 - for/of】、
- 【JS-逻辑运算符-短路了?】、
- 【JavaScript-箭头函数】、
- 【JavaScript-forEach()】、