当前位置:首页 > JavaScript

js排序实现

2026-03-15 01:26:09JavaScript

JavaScript 数组排序方法

JavaScript 提供了多种方式对数组进行排序,以下是常见的实现方法:

使用 Array.prototype.sort() 方法

默认情况下,sort() 方法将元素转换为字符串并按 Unicode 码点排序:

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

自定义排序函数

通过传递比较函数可以实现自定义排序:

js排序实现

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

对象数组排序

对于对象数组,可以根据某个属性进行排序:

const items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 }
];
items.sort((a, b) => a.value - b.value);

稳定排序实现

ES2019 规定 sort() 必须是稳定排序:

js排序实现

const data = [
  { name: 'a', order: 1 },
  { name: 'b', order: 1 },
  { name: 'c', order: 2 }
];
data.sort((a, b) => a.order - b.order);
// 保持原始a和b的相对顺序

性能优化

对于大型数组,可以考虑使用 TypedArray 提高性能:

const numbers = new Float64Array([40, 100, 1, 5, 25]);
numbers.sort();

特殊排序需求

随机排序

实现 Fisher-Yates 洗牌算法:

function shuffle(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

多条件排序

const students = [
  { name: 'Alex', grade: 15, age: 20 },
  { name: 'Bob', grade: 15, age: 18 }
];
students.sort((a, b) => {
  if (a.grade !== b.grade) return a.grade - b.grade;
  return a.age - b.age;
});

注意事项

  • sort() 方法会修改原数组
  • 比较函数应返回负数、零或正数
  • 对非ASCII字符排序需考虑本地化
  • 数字排序必须使用比较函数,否则会按字符串排序

标签: js
分享给朋友:

相关文章

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现防洪

js实现防洪

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

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现正交

js实现正交

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