学习JavaScript-排序算法-sort

568 阅读2分钟

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

上一篇文章学习了数组的遍历方法 forEach(), 但是还是有点小问题的. 还有map()方法. 另更多更文学习了 JavaScript 中的

本文来继续学习 JavaScript 中的排序方法: 在实际工作中经常用到排序算法-sort()

JavaScript sort()

我们在项目开发中, 或许每天都要面对处理数据, 而处理数据这个过程中, 对数据的排序是在程序中经常用到的算法。

排序算法

使用排序算法无论是快速排序还是冒泡排序, 排序的核心是通过比较两个元素的大小, 然后根据相关的规则进行处理后返回处理好的数据, 依次直到处理完毕。

可以直接比较数值, 而字符串或者两个对象该怎么处理? 所以将比较的过程通过函数抽象出来。

JavaScript 的 sort() 方法用来排序, 通过传递一个方法,对两个相邻元素进行比较, 根据传递的方法对两个元素进行定位(确定前后顺序)

在排序过程中每一次的比较: 对于两个元素 xy, 如果认为 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; 则为降序排列.

更多阅读