当前位置:首页 > JavaScript

js 实现sort

2026-02-01 03:38:32JavaScript

JavaScript 实现 sort 方法

JavaScript 中的 Array.prototype.sort 方法用于对数组元素进行排序。默认情况下,sort 方法将元素转换为字符串,并按照 Unicode 码点顺序排序。如果需要自定义排序逻辑,可以传入一个比较函数。

默认排序(按 Unicode 码点)

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

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

自定义排序(传入比较函数)

可以通过传入一个比较函数来实现自定义排序逻辑。比较函数接收两个参数 ab,返回值决定排序顺序:

  • 返回负数:a 排在 b 前面。
  • 返回正数:b 排在 a 前面。
  • 返回 0:顺序不变。
升序排序
const arr = [10, 2, 1, 20];
arr.sort((a, b) => a - b); // 结果为 [1, 2, 10, 20]
降序排序
const arr = [10, 2, 1, 20];
arr.sort((a, b) => b - a); // 结果为 [20, 10, 2, 1]
对象数组排序

对于对象数组,可以根据对象的某个属性排序:

const users = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 20 },
  { name: 'Charlie', age: 30 }
];
users.sort((a, b) => a.age - b.age); // 按 age 升序排序
字符串排序

字符串排序可以直接使用 localeCompare 方法:

const names = ['Alice', 'Bob', 'Charlie', 'alice'];
names.sort((a, b) => a.localeCompare(b)); // 结果为 ['Alice', 'alice', 'Bob', 'Charlie']

稳定排序

从 ES2019 开始,sort 方法被要求是稳定的(即相同值的元素在排序后保持原有顺序)。例如:

const arr = [
  { value: 1, index: 0 },
  { value: 1, index: 1 },
  { value: 2, index: 2 }
];
arr.sort((a, b) => a.value - b.value); // 相同 value 的元素保持原有顺序

性能注意事项

sort 方法的时间复杂度和具体实现有关,但通常为 O(n log n)。对于大型数组,建议避免在比较函数中执行复杂操作。

手动实现排序(示例:冒泡排序)

如果需要手动实现排序算法,以下是冒泡排序的示例:

js 实现sort

function bubbleSort(arr) {
  let len = arr.length;
  for (let i = 0; i < len; i++) {
    for (let j = 0; j < len - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 交换元素
      }
    }
  }
  return arr;
}
const arr = [10, 2, 1, 20];
bubbleSort(arr); // 结果为 [1, 2, 10, 20]

标签: jssort
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

链表实现js

链表实现js

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

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…