当前位置:首页 > 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实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现复制

js实现复制

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

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…