当前位置:首页 > JavaScript

js实现sort

2026-04-05 16:04:21JavaScript

实现 JavaScript 的 sort 方法

JavaScript 的 Array.prototype.sort 方法用于对数组元素进行排序。默认情况下,它会将元素转换为字符串并按 Unicode 码点排序。如果需要自定义排序逻辑,可以传入一个比较函数。

默认排序(按 Unicode 码点)

默认情况下,sort 方法会将数组元素转换为字符串并比较它们的 Unicode 码点顺序。

const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']

对于数字数组,默认排序可能会导致意外的结果,因为它会将数字转换为字符串后再比较:

js实现sort

const numbers = [10, 2, 5, 1, 9];
numbers.sort();
console.log(numbers); // [1, 10, 2, 5, 9](非预期的数字顺序)

自定义排序(传入比较函数)

为了正确排序数字或其他自定义逻辑,可以传入一个比较函数。比较函数接收两个参数 ab,返回值决定排序顺序:

  • 返回负数:a 排在 b 前面。
  • 返回正数:b 排在 a 前面。
  • 返回 0:顺序不变。

数字升序排序:

js实现sort

const numbers = [10, 2, 5, 1, 9];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 2, 5, 9, 10]

数字降序排序:

const numbers = [10, 2, 5, 1, 9];
numbers.sort((a, b) => b - a);
console.log(numbers); // [10, 9, 5, 2, 1]

对象数组排序: 可以根据对象的某个属性排序:

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

实现自定义排序算法

如果需要手动实现排序算法(如快速排序、冒泡排序等),可以编写自己的排序函数。以下是快速排序的实现示例:

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++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }

  return [...quickSort(left), pivot, ...quickSort(right)];
}

const numbers = [10, 2, 5, 1, 9];
const sortedNumbers = quickSort(numbers);
console.log(sortedNumbers); // [1, 2, 5, 9, 10]

注意事项

  • sort 方法会修改原数组,而不是返回一个新数组。
  • 对于大型数组,内置的 sort 方法通常比手动实现的排序算法更高效,因为它使用优化过的排序算法(如 TimSort)。
  • 如果需要不区分大小写的字符串排序,可以在比较函数中统一转换为大写或小写:
const names = ['Alice', 'bob', 'Charlie', 'dave'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
console.log(names); // ['Alice', 'bob', 'Charlie', 'dave']

标签: jssort
分享给朋友:

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js如何实现继承

js如何实现继承

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

js防抖和节流实现

js防抖和节流实现

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

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…