当前位置:首页 > JavaScript

js实现排序

2026-01-16 12:13:51JavaScript

数组排序方法

JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。

const numbers = [3, 1, 4, 1, 5, 9];
numbers.sort((a, b) => a - b); // 升序排序 [1, 1, 3, 4, 5, 9]
numbers.sort((a, b) => b - a); // 降序排序 [9, 5, 4, 3, 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); // 按年龄升序

字符串排序

字符串排序默认按字母顺序排列,可通过localeCompare实现更复杂的排序逻辑。

js实现排序

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

自定义排序算法

实现快速排序算法示例:

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++) {
    arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
}

稳定排序实现

ES2019后Array.prototype.sort保证稳定性。如需手动实现稳定排序,可保留原始索引:

function stableSort(arr, compare) {
  const indexedArr = arr.map((v, i) => [v, i]);
  indexedArr.sort((a, b) => compare(a[0], b[0]) || a[1] - b[1]);
  return indexedArr.map(v => v[0]);
}

性能考虑

对于大数据量排序,快速排序和归并排序通常比内置sort()更高效。V8引擎的sort()方法使用Timsort算法(混合归并和插入排序),时间复杂度为O(n log n)。

标签: js
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const ch…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现跳转

js实现跳转

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

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…