当前位置:首页 > JavaScript

js sort 实现

2026-02-28 23:19:38JavaScript

实现 JavaScript 数组排序的方法

JavaScript 提供了 Array.prototype.sort() 方法用于对数组元素进行排序。默认情况下,sort() 方法将元素转换为字符串并按照 Unicode 码点顺序排序。为了更灵活地排序,可以传入自定义的比较函数。

基本用法(默认排序)

默认排序会将元素转换为字符串,并按 Unicode 码点升序排列:

const arr = [10, 2, 5, 1, 9];
arr.sort(); // 结果为 [1, 10, 2, 5, 9]

自定义比较函数

通过传递比较函数,可以实现数字、对象或其他复杂排序逻辑。

js sort 实现

数字升序排序
const arr = [10, 2, 5, 1, 9];
arr.sort((a, b) => a - b); // 结果为 [1, 2, 5, 9, 10]
数字降序排序
const arr = [10, 2, 5, 1, 9];
arr.sort((a, b) => b - a); // 结果为 [10, 9, 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);
// 结果按 age 升序排列
字符串排序

按字母顺序排序(区分大小写):

js sort 实现

const names = ['Zoe', 'Alice', 'bob', 'Charlie'];
names.sort(); // 结果为 ['Alice', 'Charlie', 'Zoe', 'bob']

不区分大小写的字符串排序:

const names = ['Zoe', 'Alice', 'bob', 'Charlie'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
// 结果为 ['Alice', 'bob', 'Charlie', 'Zoe']

稳定性

从 ES2019 开始,sort() 方法是稳定的,即对于相同值的元素,排序后的相对顺序与排序前一致。

原地排序

sort() 方法会修改原数组,而不会创建新数组。如果需要保留原数组,可以先复制一份:

const original = [3, 1, 4, 2];
const sorted = [...original].sort();

性能说明

sort() 的时间复杂度取决于具体实现,现代浏览器通常使用高效的排序算法(如 TimSort)。对于大型数组,自定义比较函数的性能可能成为瓶颈。

标签: jssort
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js实现复选框

js实现复选框

实现复选框的基本方法 使用HTML的<input type="checkbox">元素创建复选框,并通过JavaScript监听其状态变化。 <input type="checkb…