当前位置:首页 > 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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…