JavaScript中sort()函数的排序逻辑
在JavaScript中sort()函数默认会把数组的元素转换成字符串然后再进行排序。如果数组中的元素是 number 类型的那么得到结果可能和我们想的不一样。举例如下arr[50,90,1,10,2];// 比如 arr 数组直接使用 sort() 方法进行排序时会把该数组中的每个元素都转化成字符串然后再进行排序得到的结果为[1, 10, 2, 50, 90]// 我们期望的结果是[1, 2, 10, 50, 90];那么怎么样才能让数组 arr 使用 sort() 方法后得到想要的结果呢在使用 sort() 方法对 arr 数组进行排序时需要传入一个函数作为其参数。具体示例如下所示[1]// 需要排序的数组vararr[50,90,1,10,2];// 按照升序对arr中的元素进行排列的方法arrarr.sort((current,next){// 即按升序排序returncurrent-next;});// 上述代码使用sort()方法进行排序的实际思路如下所示// 1. current 50, next 90// current - next 50 - 90 -40// 由于 (current - next) 的结果为负数因此无需变数组元素的索引位置此时经过排序后的数组如下所示// [50, 90, 1, 10, 2];// 2. current 90, next 1// current - next 90 - 1 89// 由于 (current - next) 的结果为正数因此需要改变数组元素的索引位置此时经过排序后的数组如下所示// [50, 1, 90, 10, 2];// 3. 此时sort()会判断arr 数组中 90 前面的两个元素是否进行过比较。如果没有进行过比较则需要进行比较处理。即// 此时需要比较的数组元素为 50 和 1即// current 50, next 1// current - next 50 - 1 49// 由于 (current - next) 的结果为正数因此需要改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 50, 90, 10, 2];// 4. sort()能够识别数组中的两个元素是否已经进行过比较如果已经进行过比较那么不会重复再比较一次。此时current 和 next 的值如下所示// current 90, next 10// current - next 90 - 10 80// 由于 (current - next) 的结果为正数因此需要改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 50, 10, 90, 2];// 5. current 50, next 10// current - next 50 - 10 40// 由于 (current - next) 的结果为正数因此需要改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 10, 50, 90, 2];// 6. current 1, next 10// current - next 1 - 10 -9// 由于 (current - next) 的结果为负数因此无需改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 10, 50, 90, 2];// 7. current 90, next 2// current - next 90 - 2 89// 由于 (current - next) 的结果为正数因此需要改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 10, 50, 2, 90];// 8. current 50, next 2// current - next 50 - 2 48// 由于 (current - next) 的结果为正数因此需要改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 10, 2, 50, 90];// 9. current 10, next 2// current - next 10 - 2 8// 由于 (current - next) 的结果为正数因此需要改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 2, 10, 50, 90];// 10. current 1, next 2// current - next 1 - 2 -1// 由于 (current - next) 的结果为负数因此无需改变数组元素的索引位置此时经过排序后的数组如下所示// [1, 2, 10, 50, 90];// 自此使用sort()函数对数组中元素为number类型的数组完成了升序排序。如果要进行降序排列那么只需要把 current - next 修改 next - current 即可。参考文章[1] https://stackoverflow.com/questions/3423394/algorithm-of-javascript-sort-function[2]JavaScript的sort()方法的底层实现https://github.com/v8/v8/blob/ad82a40509c5b5b4680d4299c8f08d6c6d31af3c/src/js/array.js的第710行

相关新闻

TPIC7710EVM评估板实战指南:从硬件连接到软件调试的完整流程

TPIC7710EVM评估板实战指南:从硬件连接到软件调试的完整流程

1. 评估板的核心价值与TPIC7710EVM概述 在嵌入式系统、汽车电子或者工业控制的硬件开发流程里,从一颗芯片的数据手册到最终稳定可靠的量产产品,中间隔着一条名为“工程实现”的鸿沟。数据手册告诉你芯片能做什么,电气特性如何,但不…

2026/7/28 14:52:21 阅读更多 →
php中客户端向服务端传输对象数据

php中客户端向服务端传输对象数据

在实际应用中,我们通过 http, https, tcp, udp, unix socket 等来传输数据,基本都是传输字符串,二进制数据,那么可不可以传递对象呢,答案是肯定的。 主要函数:序列化和反序列化 1、serialize ( mixed $valu…

2026/7/28 14:51:21 阅读更多 →
151、影像质量评价体系总览:从主观感知到客观指标的完整映射

151、影像质量评价体系总览:从主观感知到客观指标的完整映射

151、影像质量评价体系总览:从主观感知到客观指标的完整映射 去年在调试某款旗舰手机的后置主摄时,遇到一个让人抓狂的问题:实验室测出来的MTF曲线漂亮得像教科书上的范例,SFR数值也稳稳站在0.8以上,但到了产品评审会上,影像团队的几位资深评测员却一致摇头——他们说照片…

2026/7/28 14:51:21 阅读更多 →

最新新闻

UE5音频中间件选型指南:MetaSound、FMOD与Wwise深度对比

UE5音频中间件选型指南:MetaSound、FMOD与Wwise深度对比

1. 项目概述:音频中间件选型,一个决定项目成败的隐形战场在UE5项目开发的早期阶段,音频系统的选型往往容易被忽视,但它却像项目的“听觉骨架”,一旦定型,后期重构的成本极高。当你的项目从原型走向规模化&a…

2026/7/28 14:58:23 阅读更多 →
Three.js vs Babylon.js vs R3F:Web3 3D 可视化框架的渲染性能与生态适配度评测

Three.js vs Babylon.js vs R3F:Web3 3D 可视化框架的渲染性能与生态适配度评测

Three.js vs Babylon.js vs R3F:Web3 3D 可视化框架的渲染性能与生态适配度评测 一、引言 Web3 应用中的 3D 可视化需求正在从"锦上添花"转变为"刚需组件"。NFT 市场需要 3D 模型展示、Metaverse 项目依赖实时 3D 渲染、链上数据看板需要 3D 拓…

2026/7/28 14:58:23 阅读更多 →
提醒:AI还没正式上线,已经被人全网扫描

提醒:AI还没正式上线,已经被人全网扫描

企业的AI应用可能还在测试,攻击者却已经开始批量寻找公网中的模型接口、MCP服务和访问凭证。近期,一台没有部署MCP服务和本地大模型的普通网站服务器,在连续14天内仍收到接近200次AI相关探测。这不是针对某家企业的定向攻击,而是一…

2026/7/28 14:58:23 阅读更多 →
AI Agent 框架选型指南:LangChain、Eliza、CrewAI 在 Web3 场景的集成能力与局限性

AI Agent 框架选型指南:LangChain、Eliza、CrewAI 在 Web3 场景的集成能力与局限性

AI Agent 框架选型指南:LangChain、Eliza、CrewAI 在 Web3 场景的集成能力与局限性 一、引言 AI Agent 的范式演进正在从"对话式助手"走向"自主执行任务"的阶段。在 Crypto 领域,这种能力有天然的应用场景:根据市场信号自…

2026/7/28 14:58:23 阅读更多 →
Keil MDK 编译信息解读

Keil MDK 编译信息解读

一、资源占用 嵌入式系统开发时,在程序源码设计编写完成后,需要使用编译器将程序源码转换编译为控制器平台可以识别的二进制文件(通常是.hex文件)。在编译器件编译器可以获取了程序所需要占用的存储资源信息,一般也会输出供程序编写者查看。 …

2026/7/28 14:58:23 阅读更多 →
vLLM与SGLang:大模型推理框架的技术对比与应用指南

vLLM与SGLang:大模型推理框架的技术对比与应用指南

1. 大模型推理框架的战场格局 2023年大模型推理领域最引人注目的现象,莫过于vLLM和SGLang这两个框架的崛起。作为长期跟踪大模型工程化的从业者,我亲眼见证了vLLM如何凭借PagedAttention技术横扫推理性能榜单,也目睹了SGLang如何通过声明式编…

2026/7/28 14:57:23 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻