当前位置:首页 > JavaScript

实现sort js

2026-03-02 05:14:46JavaScript

实现 JavaScript 排序

在 JavaScript 中,可以通过多种方式实现数组排序。以下是几种常见的方法:

使用 Array.prototype.sort()

JavaScript 提供了内置的 sort() 方法,可以对数组进行排序。默认情况下,sort() 方法将元素转换为字符串并按 Unicode 码点排序。

const arr = [3, 1, 4, 1, 5, 9];
arr.sort(); // 默认排序
console.log(arr); // [1, 1, 3, 4, 5, 9]

自定义排序规则

可以通过传递一个比较函数来定义排序规则。比较函数接收两个参数 ab,返回一个负数、零或正数来表示排序顺序。

实现sort js

const arr = [3, 1, 4, 1, 5, 9];
arr.sort((a, b) => a - b); // 升序排序
console.log(arr); // [1, 1, 3, 4, 5, 9]

arr.sort((a, b) => b - a); // 降序排序
console.log(arr); // [9, 5, 4, 3, 1, 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);
// [
//   { name: 'Charlie', age: 20 },
//   { name: 'Alice', age: 25 },
//   { name: 'Bob', age: 30 }
// ]

实现自定义排序算法

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

实现sort js

function quickSort(arr) {
  if (arr.length <= 1) return arr;
  const pivot = arr[0];
  const left = [];
  const right = [];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) left.push(arr[i]);
    else right.push(arr[i]);
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
}

const arr = [3, 1, 4, 1, 5, 9];
const sortedArr = quickSort(arr);
console.log(sortedArr); // [1, 1, 3, 4, 5, 9]

处理 Unicode 字符串排序

对于字符串排序,可以使用 localeCompare() 方法处理 Unicode 字符。

const names = ['Alice', 'Bob', 'Charlie', 'álice'];
names.sort((a, b) => a.localeCompare(b));
console.log(names); // ['álice', 'Alice', 'Bob', 'Charlie']

稳定性问题

JavaScript 的 sort() 方法在 ES2019 后是稳定的(相同元素的相对顺序不变)。如果需要更早版本的稳定性,可以手动实现稳定排序。

function stableSort(arr, compare) {
  const indexedArr = arr.map((item, index) => ({ item, index }));
  indexedArr.sort((a, b) => compare(a.item, b.item) || a.index - b.index);
  return indexedArr.map(({ item }) => item);
}

const arr = [{ value: 1 }, { value: 2 }, { value: 1 }];
const sortedArr = stableSort(arr, (a, b) => a.value - b.value);
console.log(sortedArr); // 保持相同元素的原始顺序

以上方法涵盖了 JavaScript 中排序的常见需求,可以根据具体场景选择合适的方式。

标签: sortjs
分享给朋友:

相关文章

js实现复制到剪贴板

js实现复制到剪贴板

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

链表实现js

链表实现js

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

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现正交

js实现正交

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

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…