当前位置:首页 > JavaScript

js 实现sort

2026-04-05 20:01:42JavaScript

实现 JavaScript 的 sort 方法

JavaScript 的 Array.prototype.sort 方法用于对数组元素进行排序。默认情况下,它将元素转换为字符串并按照 Unicode 码点顺序排序。可以通过传递一个比较函数来自定义排序行为。

默认排序(按 Unicode 码点)

默认情况下,sort 方法会将数组元素转换为字符串,然后比较它们的 Unicode 码点顺序。

js 实现sort

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

自定义排序(使用比较函数)

通过传递一个比较函数,可以自定义排序逻辑。比较函数接收两个参数 ab,并返回以下值:

  • 负数:a 排在 b 前面
  • 正数:b 排在 a 前面
  • 零:顺序不变
const numbers = [40, 100, 1, 5, 25];
numbers.sort((a, b) => a - b); // 升序排序
console.log(numbers); // [1, 5, 25, 40, 100]

numbers.sort((a, b) => b - a); // 降序排序
console.log(numbers); // [100, 40, 25, 5, 1]

对象数组排序

对于对象数组,可以通过比较对象的某个属性值来排序。

js 实现sort

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

users.sort((a, b) => a.age - b.age); // 按年龄升序
console.log(users);
// [
//   { name: 'Bob', age: 20 },
//   { name: 'John', age: 25 },
//   { name: 'Jane', age: 30 }
// ]

字符串排序(不区分大小写)

默认的字符串排序区分大小写。可以通过转换为统一大小写来实现不区分大小写的排序。

const fruits = ['banana', 'Apple', 'orange', 'Cherry'];
fruits.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
console.log(fruits); // ['Apple', 'banana', 'Cherry', 'orange']

稳定排序

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

const items = [
  { name: 'Apple', weight: 1 },
  { name: 'Banana', weight: 2 },
  { name: 'Cherry', weight: 1 }
];

items.sort((a, b) => a.weight - b.weight);
console.log(items);
// [
//   { name: 'Apple', weight: 1 },
//   { name: 'Cherry', weight: 1 },
//   { name: 'Banana', weight: 2 }
// ]

注意事项

  • sort 方法会修改原数组。
  • 对于数字排序,直接使用默认排序会导致错误结果(如 [1, 10, 2, 20])。
  • 复杂排序可能需要更复杂的比较函数。

标签: jssort
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…