当前位置:首页 > JavaScript

js sort实现

2026-03-01 04:15:09JavaScript

JavaScript 数组排序实现

JavaScript 提供了 Array.prototype.sort() 方法用于对数组元素进行排序。默认情况下,sort() 方法将元素转换为字符串并按照 Unicode 码点顺序排序。对于数字或其他复杂排序需求,需要自定义比较函数。

默认排序(字符串排序)

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

数字升序排序

const numbers = [40, 100, 1, 5, 25];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 5, 25, 40, 100]

数字降序排序

const numbers = [40, 100, 1, 5, 25];
numbers.sort((a, b) => b - a);
console.log(numbers); // [100, 40, 25, 5, 1]

对象数组排序

const users = [
  { name: 'John', age: 25 },
  { name: 'Jane', age: 30 },
  { name: 'Bob', age: 20 }
];

// 按年龄升序
users.sort((a, b) => a.age - b.age);

// 按姓名字母顺序
users.sort((a, b) => a.name.localeCompare(b.name));

稳定排序实现

从 ES2019 开始,JavaScript 要求 sort() 方法必须是稳定排序(相同元素的相对位置保持不变)。对于需要稳定排序的旧环境,可以手动实现:

js sort实现

function stableSort(array, compare) {
  const stabilized = array.map((el, index) => ({ el, index }));
  stabilized.sort((a, b) => {
    const order = compare(a.el, b.el);
    if (order !== 0) return order;
    return a.index - b.index;
  });
  return stabilized.map(entry => entry.el);
}

多条件排序

const items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'Edward', value: 12 }
];

items.sort((a, b) => {
  if (a.name > b.name) return 1;
  if (a.name < b.name) return -1;
  return a.value - b.value;
});

本地化字符串排序

const items = ['réservé', 'Premier', 'Cliché', 'communiqué'];
items.sort((a, b) => a.localeCompare(b, 'fr', { sensitivity: 'base' }));

注意事项

  • sort() 方法会修改原数组
  • 比较函数应返回负数、零或正数
  • 对于大型数据集,可能需要考虑性能优化
  • 默认排序时间复杂度通常为 O(n log n),但具体实现取决于 JavaScript 引擎

标签: jssort
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现选项卡

js实现选项卡

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

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…