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 日

相关推荐

  • manim边做边学–动画更新

    今天介绍Manim中用于动画更新的3个类 ,分别是: UpdateFromFunc:根据自定义的函数来动态更新 Mobject 的属性 UpdateFromAlphaFunc:根据动画的进度来平滑地改变 Mobject 的属性 MaintainPositionRelativeTo:保持多个 Mobject 之间的相对位置关系 这3个类 分别从自定义更新、基于…

    2025 年 1 月 13 日
    43100
  • Java ArrayList 与顺序表:在编程海洋中把握数据结构的关键之锚

    我的个人主页我的专栏:Java-数据结构 ,希望能帮助到大家!!!点赞❤ 收藏❤ 前言 :在 Java编程的广袤世界里,数据结构犹如精巧的建筑蓝图,决定着程序在数据处理与存储时的效率、灵活性以及可扩展性。其中,ArrayList和顺序表作为线性数据结构的典型代表,犹如两颗璀璨的明星,在众多数据处理场景中熠熠生辉。 顺序表,以其简洁而直观的连续内存存储方式,为…

    2024 年 12 月 28 日
    39800
  • Redis Java 集成到 Spring Boot

    Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Redis 📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。 Redis Java 集成到 Spring Boot 一、使用 Spring Boot 连接 Redis 单机 1.创…

    2025 年 1 月 1 日
    43700
  • 交易系统:线上交易系统流程详解

    大家好,我是汤师爷~ 今天聊聊线上交易系统流程详解。 线上交易系统为新零售连锁商家提供一站式线上交易解决方案。其核心目标是,通过数字化手段扩大商家的服务范围,突破传统门店的地理限制。系统支持电商、O2O等多种业务形态,为商家提供全方位的线上运营能力。 线上交易系统包含两个核心流程:正向交易流程、逆向交易流程。 正向交易流程负责处理从订单创建到完成的标准交易过…

    2024 年 12 月 31 日
    32000
  • IoC究竟是什么?——IoC的基础分析

    IoC全称Inversion of Control,直译为控制反转。这是一种设计理念,并非技术。在明白控制反转之前,应该知道“反转”反的是什么。 被反转的正转 我们从生活中的做饭场景开始。 在家做菜与餐馆吃饭 我们在做饭的时候有很多个步骤,需要准备原料,厨具等等。最后通过一定的顺序加入我们的原料,再进行翻炒等烹饪操作就能够得到一份菜了。我们想吃一份菜不一定需…

    未分类 2025 年 1 月 13 日
    42500

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信