当前位置:首页 > JavaScript

js排序实现

2026-02-02 01:59:26JavaScript

JavaScript 数组排序基础

使用 Array.prototype.sort() 方法对数组进行排序。默认情况下,sort() 将元素转换为字符串并按 Unicode 码点排序:

const arr = [3, 1, 4, 2];
arr.sort(); // 输出: [1, 2, 3, 4](数字排序正确)
const strArr = ['banana', 'apple', 'cherry'];
strArr.sort(); // 输出: ['apple', 'banana', 'cherry']

自定义排序规则

通过传递比较函数实现复杂排序。比较函数接收参数 ab,返回负数、零或正数:

js排序实现

// 数字升序
const numbers = [10, 2, 5];
numbers.sort((a, b) => a - b); // 输出: [2, 5, 10]

// 数字降序
numbers.sort((a, b) => b - a); // 输出: [10, 5, 2]

// 对象数组按属性排序
const users = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 20 }
];
users.sort((a, b) => a.age - b.age); // 按 age 升序

字符串排序的本地化支持

使用 localeCompare() 处理语言敏感的字符串排序(如忽略大小写或特定语言规则):

js排序实现

const fruits = ['Apple', 'banana', 'Cherry'];
fruits.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
// 输出: ['Apple', 'banana', 'Cherry'](不区分大小写)

稳定排序的实现

ES2019 后 sort() 稳定,但如需兼容旧环境,可通过索引保持稳定性:

const data = [
  { value: 2, priority: 1 },
  { value: 1, priority: 1 },
  { value: 3, priority: 2 }
];
// 添加索引辅助稳定排序
data.forEach((item, index) => item.index = index);
data.sort((a, b) => 
  a.priority - b.priority || a.index - b.index
);
// 相同 priority 的元素保持原始顺序

复杂多条件排序

结合多个属性或条件进行排序:

const tasks = [
  { title: 'Task A', priority: 'high', due: '2023-10-01' },
  { title: 'Task B', priority: 'low', due: '2023-09-01' }
];
tasks.sort((a, b) => {
  const priorityOrder = { high: 1, medium: 2, low: 3 };
  return (
    priorityOrder[a.priority] - priorityOrder[b.priority] ||
    new Date(a.due) - new Date(b.due)
  );
});
// 先按 priority 升序,再按日期升序

性能注意事项

  • 大规模数据排序时,考虑使用 TypedArray 或 Web Worker 避免阻塞主线程。
  • 对固定结构数据,预处理(如生成排序键)可能提升效率。

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现复制

js实现复制

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

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现驼峰

js实现驼峰

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

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…