当前位置:首页 > JavaScript

实现js数组排序

2026-02-03 06:54:13JavaScript

使用 Array.prototype.sort() 方法

JavaScript 数组的 sort() 方法是实现排序的最直接方式。默认情况下,sort() 将元素转换为字符串并按照 Unicode 码点顺序排序。对于数字排序,需自定义比较函数。

const numbers = [3, 1, 4, 1, 5, 9, 2, 6];
numbers.sort((a, b) => a - b); // 升序:[1, 1, 2, 3, 4, 5, 6, 9]
numbers.sort((a, b) => b - a); // 降序:[9, 6, 5, 4, 3, 2, 1, 1]

自定义对象数组排序

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

实现js数组排序

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

实现稳定排序

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

const data = [
  { value: 1, priority: 1 },
  { value: 2, priority: 0 },
  { value: 3, priority: 1 }
];
data.sort((a, b) => {
  if (a.priority === b.priority) return 0; // 保持原始顺序
  return a.priority - b.priority;
});

按字符串属性排序

对字符串属性排序需使用 localeCompare() 方法处理大小写和语言差异:

实现js数组排序

const items = ['résumé', 'Rose', 'house', 'Hotel'];
items.sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' }));
// 结果:['house', 'Hotel', 'résumé', 'Rose']

多条件排序

通过组合多个比较条件实现复杂排序:

const products = [
  { name: 'Laptop', price: 800, stock: 4 },
  { name: 'Phone', price: 500, stock: 10 },
  { name: 'Tablet', price: 800, stock: 5 }
];
products.sort((a, b) => {
  if (a.price !== b.price) return a.price - b.price;
  return b.stock - a.stock; // 价格相同时按库存降序
});

性能注意事项

对于大规模数据(超过 10^5 个元素),sort() 的时间复杂度为 O(n log n)。若需更高性能,可考虑:

  • 使用 TypedArray 处理数值数据
  • 对于已知范围的小整数,使用计数排序等线性算法
  • 使用 Web Workers 避免阻塞主线程

标签: 数组js
分享给朋友:

相关文章

js实现验证码

js实现验证码

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

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现交换

js实现交换

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