当前位置:首页 > JavaScript

js实现排序

2026-02-28 22:10:05JavaScript

实现数组排序

JavaScript中数组排序可以通过内置的Array.prototype.sort()方法实现。该方法默认将元素转换为字符串并按Unicode码点排序,因此对数字排序需自定义比较函数。

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

对象数组按属性排序

当数组元素为对象时,可通过比较对象的特定属性值实现排序。

js实现排序

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

字符串排序

对字符串数组排序时需注意大小写敏感问题。可通过统一转换为大写或小写后再比较。

const names = ['Alice', 'bob', 'Charlie'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));

稳定排序实现

ES2019规定sort()必须稳定,但老旧环境可能需要手动实现。可通过记录原始索引来保证稳定性。

js实现排序

function stableSort(arr, compare) {
  return arr
    .map((item, index) => ({ item, index }))
    .sort((a, b) => compare(a.item, b.item) || a.index - b.index)
    .map(({ item }) => item);
}

自定义排序算法

如需实现特定排序算法(如快速排序、归并排序),可参考以下快速排序示例:

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)];
}

性能优化建议

对于大规模数据排序:

  • 优先使用原生sort()(V8引擎使用TimSort算法)
  • 避免在比较函数中进行复杂计算
  • 对定型数组(TypedArray)使用专用排序方法

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

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

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previ…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…