当前位置:首页 > JavaScript

实现js sort()

2026-03-02 06:04:33JavaScript

JavaScript 的 sort() 方法

sort() 是 JavaScript 数组的一个内置方法,用于对数组元素进行排序。默认情况下,sort() 将元素转换为字符串并按照 Unicode 码点顺序排序。这种默认行为可能不符合数值排序的需求,因此通常需要自定义比较函数。

基本语法

array.sort([compareFunction])
  • compareFunction(可选):定义排序顺序的函数。如果省略,元素将被转换为字符串并按 Unicode 码点排序。

默认排序(字符串排序)

const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']

数值排序

默认情况下,sort() 会将数值转换为字符串排序,可能导致错误结果。例如:

实现js sort()

const numbers = [10, 2, 5, 1];
numbers.sort();
console.log(numbers); // [1, 10, 2, 5](错误结果)

正确的数值排序需要使用比较函数:

实现js sort()

const numbers = [10, 2, 5, 1];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 2, 5, 10](升序)

numbers.sort((a, b) => b - a);
console.log(numbers); // [10, 5, 2, 1](降序)

对象数组排序

可以根据对象的某个属性进行排序:

const users = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 20 }
];

users.sort((a, b) => a.age - b.age);
console.log(users); // 按 age 升序排序

自定义排序逻辑

比较函数可以包含更复杂的逻辑。例如,按字符串长度排序:

const words = ['apple', 'banana', 'grape', 'orange'];
words.sort((a, b) => a.length - b.length);
console.log(words); // ['apple', 'grape', 'banana', 'orange']

注意事项

  • sort() 会修改原数组,而不是返回新数组。
  • 对于大型数组,自定义比较函数可能影响性能。
  • 排序稳定性(相同值的相对顺序)在 ES2019 后得到保证。

标签: jssort
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('imag…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClip…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…