[js] 在js内部的sort方法用的是什么排序?

296 阅读2分钟

"在 JavaScript 中,Array 的 sort() 方法用于对数组进行排序。该方法默认使用的是基于字符串的 Unicode 编码的排序算法。也就是说,它将数组中的每个元素都视为字符串,并根据字符串的 Unicode 编码进行比较和排序。

下面是一个示例代码,演示了如何使用 sort() 方法对数组进行排序:

const numbers = [10, 5, 8, 2, 1];
numbers.sort();
console.log(numbers); // 输出: [1, 10, 2, 5, 8]

在上面的代码中,我们创建了一个包含一些数字的数组 numbers。然后,我们调用了 sort() 方法对数组进行排序。由于 sort() 方法默认使用字符串的排序算法,所以结果不是我们期望的升序排列。实际上,它将数组元素视为字符串进行比较,因此会按照 Unicode 编码的顺序进行排序。

如果我们想要对数字进行正确的排序,我们可以传入一个比较函数作为 sort() 方法的参数。比较函数接收两个参数,通常被称为 ab,表示数组中的两个元素。比较函数需要返回一个负数、零或正数,表示 a 应该在 b 之前、与 b 相等,还是在 b 之后。

下面是一个示例代码,展示了如何使用比较函数对数字进行升序排序:

const numbers = [10, 5, 8, 2, 1];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出: [1, 2, 5, 8, 10]

在上面的代码中,我们传入了一个比较函数 (a, b) => a - b 作为 sort() 方法的参数。该函数通过计算 a - b 的结果来确定元素的顺序。如果结果为负数,则表示 a 应该在 b 之前;如果结果为零,则表示 ab 相等;如果结果为正数,则表示 a 应该在 b 之后。

通过使用比较函数,我们可以根据自定义的规则对数组进行排序,而不仅仅是按照默认的字符串排序。比较函数可以根据需要进行修改,以实现升序、降序或其他自定义的排序方式。

总结起来,JavaScript 中的 sort() 方法默认使用基于字符串的 Unicode 编码的排序算法。如果想要对数字进行正确的排序,可以传入一个比较函数作为参数,根据需要进行自定义排序。"