当前位置:首页 > JavaScript

js实现sort

2026-03-13 21:52:44JavaScript

实现 JavaScript 的 sort 方法

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

默认排序(按 Unicode 码点)

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

自定义排序(数字升序)

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

自定义排序(数字降序)

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

对象数组排序(按属性值)

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 }
// ]

实现稳定排序

JavaScript 的 sort 方法在某些浏览器中可能不稳定(相同元素的相对顺序可能改变)。要实现稳定排序,可以扩展比较逻辑:

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

const data = [
  { name: 'A', priority: 1 },
  { name: 'B', priority: 2 },
  { name: 'C', priority: 1 }
];
const result = stableSort(data, (a, b) => a.priority - b.priority);
console.log(result);
// [
//   { name: 'A', priority: 1 },
//   { name: 'C', priority: 1 },
//   { name: 'B', priority: 2 }
// ]

本地化字符串排序

对于需要考虑语言特性的字符串排序,使用 localeCompare

js实现sort

const names = ['Ångström', 'Zebra', 'äpple', 'Apple'];
names.sort((a, b) => a.localeCompare(b, 'sv'));
console.log(names); // ['Apple', 'äpple', 'Ångström', 'Zebra']

注意事项

  • sort 方法会修改原数组
  • 比较函数应返回负数、零或正数
  • 对于大型数组,考虑性能优化(如避免在比较函数中进行复杂计算)

标签: jssort
分享给朋友:

相关文章

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

链表实现js

链表实现js

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

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…