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 日

相关推荐

  • MySQL 安装部署

    概述 本文主要介绍如何在 Linux 中以 RPM 包的方式安装 MySQL 并进行相关的初始化配置,文中方案均已实践验证。 操作系统 CentOS 7.6 数据库版本 MySQL 8.4.3 LTS [!NOTE] 说明 本文主要介绍 RPM 包的安装方式,其他安装方法可查阅官网:MySQL :: MySQL 8.4 Reference Manual ::…

    未分类 2025 年 1 月 11 日
    53200
  • 常见的图形库对比 Echarts Highcharts AntV

    图形库 图形库 特点 图表类型 适用场景 依赖项 官网/文档 ECharts 功能丰富,支持大规模数据,交互性强 折线图、柱状图、饼图、地图、雷达图、散点图、热力图等 复杂数据可视化 无 https://echarts.apache.org/ Chart.js 简单易用,轻量级,支持响应式设计 折线图、柱状图、饼图、雷达图、散点图等 简单图表,快速开发 无 …

    未分类 2025 年 1 月 12 日
    54900
  • Python在多个Excel文件中找出缺失数据行数多的文件

    本文介绍基于Python 语言,针对一个文件夹 下大量的Excel 表格文件,基于其中每一个文件 内、某一列数据 的特征,对其加以筛选,并将符合要求 与不符合要求 的文件分别复制到另外两个新的文件夹 中的方法。 首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel 表格文件(在本文中我们就以csv格式的文件为例);如下图所示。 其中,每…

    2025 年 1 月 11 日
    59600
  • Microi 吾码与 JavaScript:前端低代码平台的强大组合

    目录 一、引言 二、Microi 吾码概述 三、JavaScript 在 Microi 吾码前端开发中的应用 (一)前端 V8 引擎与 JavaScript (二)接口引擎与 JavaScript 四、JavaScript 在 Microi 吾码后端开发中的协同 (一)与 C# 后端框架的交互 (二)利用 gRPC 实现跨语言通信 五、Microi 吾码中 …

    2025 年 1 月 10 日
    53100
  • IntelliJ IDEA激活破解补丁下载(IDEA永久激活破解)

    IDEA最新永久激活破解教程:https://www.it1024doc.com/4100.html 破解补丁下载 因为提取的人数比较多,导致分享的百度网盘链接容易被封: 所以需要下载破解补丁的,扫描下方公众号,关注后,发送关键字:0622 即可免费无套路的获取破解补丁!

    2024 年 6 月 22 日
    10.3K00

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信