当前位置:首页 > 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]

对象数组排序

对于对象数组,可根据对象的某个属性进行排序。

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

字符串排序

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

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保证稳定性。如需手动实现稳定排序,可保留原始索引:

js实现排序

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实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…