当前位置:首页 > JavaScript

实现js sort

2026-01-31 21:18:42JavaScript

实现 JavaScript 的 sort 方法

JavaScript 的 sort 方法用于对数组元素进行排序。默认情况下,sort 方法将元素转换为字符串并按照 Unicode 码点顺序排序。为了实现更复杂的排序逻辑,可以传入自定义的比较函数。

默认排序(按 Unicode 顺序)

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

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

自定义比较函数

通过传入一个比较函数,可以实现自定义排序逻辑。比较函数接收两个参数 ab,返回以下值:

  • 负数:a 排在 b 前面。
  • 正数:b 排在 a 前面。
  • 零:顺序不变。
数字升序排序
const numbers = [10, 2, 5, 1, 8];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 2, 5, 8, 10]
数字降序排序
const numbers = [10, 2, 5, 1, 8];
numbers.sort((a, b) => b - a);
console.log(numbers); // [10, 8, 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 }
// ]
字符串排序(不区分大小写)
const names = ['Alice', 'bob', 'Charlie', 'dave'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
console.log(names); // ['Alice', 'bob', 'Charlie', 'dave']

实现原地排序

sort 方法会直接修改原数组(原地排序),而不会返回新数组。如果需要保留原数组,可以先复制一份再排序:

实现js   sort

const original = [3, 1, 4, 2];
const sorted = [...original].sort((a, b) => a - b);
console.log(original); // [3, 1, 4, 2]
console.log(sorted); // [1, 2, 3, 4]

注意事项

  • sort 方法的时间复杂度和具体实现相关,通常为 O(n log n)。
  • 对于大型数组,自定义比较函数的性能可能影响排序速度。
  • 默认排序会将数字转换为字符串,可能导致意外结果(如 [1, 10, 2] 排序为 [1, 10, 2])。

标签: jssort
分享给朋友:

相关文章

js实现日历

js实现日历

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

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现交换

js实现交换

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

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…