当前位置:首页 > JavaScript

实现js sort

2026-02-01 04:00:24JavaScript

实现 JavaScript 的 sort 方法

JavaScript 的 sort 方法用于对数组元素进行排序,默认按字符串 Unicode 码点排序。以下是几种常见的实现方式和注意事项。

基本用法

默认情况下,sort 会将元素转换为字符串并比较 Unicode 码点:

const arr = [10, 2, 5, 1];
arr.sort(); // 结果为 [1, 10, 2, 5]

自定义排序函数

通过传递比较函数,可以实现数字或其他复杂类型的排序:

const arr = [10, 2, 5, 1];
arr.sort((a, b) => a - b); // 升序排序,结果为 [1, 2, 5, 10]
arr.sort((a, b) => b - a); // 降序排序,结果为 [10, 5, 2, 1]

对象数组排序

对对象数组按某个属性排序:

实现js sort

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

字符串排序

对字符串数组按字母顺序排序(区分大小写):

const names = ['Alice', 'bob', 'Charlie'];
names.sort(); // 结果为 ['Alice', 'Charlie', 'bob']

不区分大小写的排序:

实现js sort

names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));

稳定性

现代 JavaScript 引擎实现了稳定的排序(相同值的元素顺序不变),但早期版本可能不稳定。

性能注意事项

sort 的时间复杂度通常为 O(n log n),但具体实现取决于浏览器或 Node.js 的引擎。

手动实现快速排序

以下是一个简单的快速排序实现:

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

注意事项

  • sort 会修改原数组
  • 比较函数应返回负数、零或正数
  • 对于大型数组,内置 sort 通常比手动实现的算法更高效

标签: jssort
分享给朋友:

相关文章

js实现轮播

js实现轮播

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

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现继承

js实现继承

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

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…