JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)

目录

JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)

一、为什么要使用Array.sort()

Array.sort() 是 JavaScript 提供的一个内置数组排序方法。它不仅仅是一个简单的升序或降序排列工具,更是一种灵活的排序逻辑实现方式。通过深入了解和掌握 Array.sort() 的用法,我们可以结合其他数组方法,实现复杂的数据操作和性能优化。本文将从基础语法讲起,逐步深入探讨 Array.sort() 的高级用法,并展示其在实际开发中的多样化应用。

二、Array.sort() 的使用与技巧

1、基础语法

Array.sort() 方法对数组元素进行原地排序,并返回排序后的数组。默认情况下,sort() 方法会将数组元素转换为字符串,并按照字典顺序进行排序。

array.sort([compareFunction]);

compareFunction(可选):定义排序顺序的函数,接收两个参数 ab

  • 如果返回值小于 0,则 a 排在 b 前面。
  • 如果返回值大于 0,则 b 排在 a 前面。
  • 如果返回值为 0,则两者位置不变。

2、返回值

Array.sort() 会根据比较函数的规则修改原数组,直至排序完成,不会创建新的数组。

3、使用技巧

Array.sort() 的核心在于比较函数,通常需要我们根据实际需求编写比较函数。

直接比较数字数组时,可能会出现 "10" < "6" 的情况,因为在字符串比较中,比较是从第一位开始的,"1" 在 "6" 前面,所以 "10" < "6"。

const numbers = [25, 100, 9, 2];
numbers.sort();
console.log(numbers); 
// 输出:[100, 2, 25, 9] (按照字典序排序)

若要对数字数组进行排序,可以编写一个简单的比较函数。

const numbers = [25, 100, 9, 2];
numbers.sort((a, b) => a - b); // 升序排序
console.log(numbers); 
// 输出:[2, 9, 25, 100]

三、Array.sort() 的复杂用法与实际应用案例

1、多字段排序(适用于对象元素的数组,数据库排序)

在实际开发中,我们经常需要根据多个字段对数据对象进行排序。例如,一个用户列表可能需要先按角色排序,再按用户名排序。

const users = [
  { name: 'Alice', age: 25, role: 'user' },
  { name: 'Bob', age: 22, role: 'admin' },
  { name: 'Charlie', age: 35, role: 'user' },
  { name: 'Dave', age: 30, role: 'admin' },
];

// 按角色升序,角色相同时按年龄升序
users.sort((a, b) => {
  if (a.role === b.role) {
    return a.age - b.age; // 按年龄升序
  }
  return a.role.localeCompare(b.role); // 按角色字典序
});

console.log(users);
/*
输出:
[
  { name: 'Bob', age: 22, role: 'admin' },
  { name: 'Dave', age: 30, role: 'admin' },
  { name: 'Alice', age: 25, role: 'user' },
  { name: 'Charlie', age: 35, role: 'user' }
]
*/

2、按日期排序

可以通过将日期字符串转换为 Date 对象来实现排序。

const events = [
  { name: 'Event A', date: '2024-11-20' },
  { name: 'Event B', date: '2023-12-25' },
  { name: 'Event C', date: '2024-01-01' },
];

events.sort((a, b) => new Date(a.date) - new Date(b.date));
console.log(events);
/*
输出:
[
  { name: 'Event B', date: '2023-12-25' },
  { name: 'Event C', date: '2024-01-01' },
  { name: 'Event A', date: '2024-11-20' }
]
*/

3、排序稳定性

从 ECM

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4562.html

(0)
LomuLomu
上一篇 2024 年 12 月 28 日
下一篇 2024 年 12 月 28 日

相关推荐

  • Intellij IDEA激活破解教程(IDEA激活破解码)

    IntelliJ IDEA 是业内公认的高级 Java 集成开发环境,被许多专业人士视为 Java 开发的首选工具。此篇指南将引导您使用脚本方法免费激活 IntelliJ IDEA 和 Jetbrains 其他产品,适用于 2021 年及以后的版本,包含最新版本。 安装过程 您可直接在 JetBrains 官方网站获取 IntelliJ IDEA 的最新版本…

    未分类 2024 年 7 月 10 日
    78600
  • [JAVA] 第十一章:深入浅出解析”继承”核心概念(新手入门指南)

    目录导航1. 类继承机制1.1 继承原理剖析1.2 继承语法规范1.3 访问父类成员 1.3.1 子类访问父类字段①子父类字段无冲突②子父类字段同名super关键字的妙用 1.3.2 子类调用父类方法①方法名不同②方法名相同1.4 子类构造器特性🔍构造器特点精要1.5 super与this对比✔共同特征✖差异分析1.6 初始化流程详解1.7 protecte…

    2025 年 5 月 12 日
    11100
  • o3 发布了,摔碎了码农的饭碗

    大家好,我是汤师爷~ 在 2024 年底,OpenAI 发布了最新推理模型 o3。o3模型相当炸裂,在世界级编程比赛中拿下第 175 名,打败 99.9% 的参赛者。AI 写代码都赶上顶级程序员了,程序员是不是要失业? 最近不少读者反馈,像 GitHub Copilot、Claude Sonnet 3.5、Cursor 等 AI 辅助编程工具,能让代码编写效…

    2025 年 1 月 12 日
    44900
  • 高效灵活!企业级IT资产配置管理数据库解决方案

    在现代企业IT运维中,基础设施规模庞大且变动频繁,传统管理方式往往难以应对复杂的资产配置需求。本文为您推荐一款模块化设计的运维配置管理数据库系统,它能有效提升企业IT团队对硬件设备和软件服务的管控效率。 产品概述 CMDB Pro是一款采用现代化架构的配置管理数据库,具备模型自定义和智能资源探测能力,专为解决企业级IT资产管理难题而设计。核心优势:- 智能探…

    2025 年 5 月 11 日
    14800
  • keycloak~巧用client-scope实现token字段和userinfo接口的授权

    keycloak中的client-scope允许你为每个客户端分配scope,而scope就是授权范围,它直接影响了token中的内容,及userinfo端点可以获取到的用户信息,这块我们可以通过自定义scope/mapper,来实现粒度的控制,并且这个mapper可以控制添加到token,或者添加到userinfo端点,这两块配置也是独立的,下面我们通过一…

    2025 年 1 月 16 日
    41000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信