当前位置:首页 > 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实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…