js 关于数组排序的方法

news/2024/5/20 11:41:01

在JavaScript中,数组排序主要有两种主要方法:Array.prototype.sort() 和自定义排序函数。

  1. Array.prototype.sort()

sort() 方法按照字符串Unicode码点顺序对数组元素进行排序,并返回数组。对于非字符串类型的数组元素,sort() 方法会先将它们转换为字符串,然后再进行排序。

基本用法:

 

javascript复制代码

let arr = [5, 2, 9, 1, 5, 6];
arr.sort();
console.log(arr); // 输出: [1, 2, 5, 5, 6, 9],因为元素被转换为字符串后再排序

但是,如果你希望按数字大小排序,你可以提供一个比较函数作为 sort() 的参数:

 

javascript复制代码

let arr = [5, 2, 9, 1, 5, 6];
arr.sort(function(a, b) {
return a - b; // 升序排序
});
console.log(arr); // 输出: [1, 2, 5, 5, 6, 9]

如果你希望降序排序,只需改变比较函数的返回值:

 

javascript复制代码

let arr = [5, 2, 9, 1, 5, 6];
arr.sort(function(a, b) {
return b - a; // 降序排序
});
console.log(arr); // 输出: [9, 6, 5, 5, 2, 1]
  1. 自定义排序函数

虽然 sort() 方法足以满足大多数排序需求,但你也可以编写自己的排序函数。这通常涉及到使用如冒泡排序、插入排序、选择排序、快速排序等算法。但请注意,对于大型数组,JavaScript内置的 sort() 方法(当使用正确的比较函数时)通常比简单的自定义排序算法更有效。

例如,一个简单的冒泡排序实现可能如下所示:

 

javascript复制代码

function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) { // 相邻元素两两对比
let temp = arr[j + 1]; // 元素交换
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
let arr = [5, 2, 9, 1, 5, 6];
arr = bubbleSort(arr);
console.log(arr); // 输出: [1, 2, 5, 5, 6, 9]

但请注意,对于大型数组,这种简单的冒泡排序实现可能不是最高效的。在实际应用中,你通常会使用更先进的排序算法,或者简单地使用JavaScript内置的 sort() 方法。


http://www.mrgr.cn/p/21768855

相关文章

中电金信:看 “咨询+技术”如何引领数字化变革新风向

当前,新一轮创新技术和产业变革正在重塑全球的经济格局。日本政府及社会各界也从各个领域着手推进数字化。2021年,日本政府成立了“数字厅”,通过一系列举措推动数字化升级,希望将日本加速转型为数字经济的区域领导者,日本企业也积极开展数字化转型为业务创造价值。中电金…

吴恩达机器学习-第三课-第三周

吴恩达机器学习 学习视频参考b站:吴恩达机器学习 本文是参照视频学习的随手笔记,便于后续回顾。 强化学习(reinforce learning) 什么是强化学习 示例:如何让遥控飞机学会倒飞? 监督学习并不适用,因为很难有好的数据集 奖励函数,告诉飞机什么时候是表现好什么时候是表现…

蓝桥杯-地宫取宝

X 国王有一个地宫宝库,是 nm 个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它…

Nginx负载均衡、动静分离Tomcat案例实战

一、前言 1)Tomcat是一款开源的、免费的WEB软件服务器,是隶属于Apache基金会旗下的,主要是用于去发布网站代码、提供网页信息服务的。用户通过浏览器可以实现网站页面的访问。 2)Tomcat WEB软件默认可以处理静态网页(Apache、Nginx),同时也可以处理动态网页,主要是处理…

【全开源】Java v7淘宝客APP源码-自营商城任务墙源码美团外卖CPS广告联

一、淘宝客源码 特色功能&#xff1a; 商品搜索与推荐&#xff1a;基于用户的搜索关键词&#xff0c;推荐优质商品&#xff0c;帮助用户快速找到符合需求的商品。商品详情展示&#xff1a;展示商品图片、描述、价格等信息&#xff0c;帮助用户更好地了解商品的各项特性。下单…

vue 语法2

【5】条件渲染和列表渲染 &#xff08;1&#xff09;条件渲染v-if v-else-if v-else 条件渲染根据表达式的真假值来渲染不同的元素或组件。 v-if&#xff1a;当表达式的值为真时&#xff0c;渲染该元素或组件。 v-else-if&#xff1a;当前面的 v-if 或 v-else-if 的表达式为假…

three.js基础之小案例

静态场景 <canvas id="mainCanvas"></canvas> <script type="importmap">{"imports": {"three": "./js/build/three.module.js","three/addons/": "./js/jsm/"}} </script> &l…

国密算法SM2-java实现

Maven依赖<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.56</version> </dependency>工具类import java.math.BigInteger;public class Util {/*** 整形转换成网络传输…

黑客精神和白帽子

在当今数字化的世界里,黑客精神和白帽子的角色变得愈发重要。本文将探讨黑客精神的本质,介绍白帽子的概念和职责。 1、黑客精神 所谓的“黑客精神”,主要指的是一种探索计算机软件和硬件极限,追求技术创新和完善的文化态度和哲学理念。 黑客精神强调的是对知识的渴求,对于…

NFS工作原理(重要)

NFS工作流程 1.NFS服务端启动后、将自己的端口信息,注册到rpcbind服务中 2.NFS客户端通过TCP/IP的方式,连接到NFS服务端提供的rpcbind服务,并且从该服务中获取具体的端口信息 3.NFS客户端拿到具体端口信息后,将自己需要执行的函数,通过网络发给NFS服务端对应的端口 4.NFS服…

怎么用git在暂存区(stage)中移除不需要提交(commit)的文件?

2024年5月9日&#xff0c;周四上午 非常简单&#xff0c;用下面这条命令就可以了 git rm --cached <file>注&#xff1a;这条命令不会把文件从文件夹中删除&#xff0c;只会把文件从暂存区中移除出去 实战

text-generation-webui 推理模型Qwen1.5-7B-Chat相关报错问题解决

推理代码 text-generation-webui 推理模型 Qwen1.5-7B-Chat sys info nvcc --versioncuda 11.8 import torch >>> print(torch.__version__) 1 路径错误2 依赖没安装 ImportError: This modeling file requires the following packages that were not found in your …

论文分享[cvpr2018]Non-local Neural Networks非局部神经网络

论文 https://arxiv.org/abs/1711.07971 代码https://github.com/facebookresearch/video-nonlocal-net 非局部神经网络 motivation:受计算机视觉中经典的非局部均值方法[4]的启发&#xff0c;非局部操作将位置的响应计算为所有位置的特征的加权和。 非局部均值方法 NLM&#…

Vue响应式特性

响应式特性 什么是响应式&#xff1f; 简单理解就是数据变&#xff0c;视图对应变。 如何访问 和 修改 data中的数据 data中的数据, 最终会被添加到实例上 ① 访问数据&#xff1a; “实例.属性名” ② 修改数据&#xff1a; “实例.属性名” “值” <body><di…

linux上go项目打包与部署

1.第一步把项目打包 1.确保本地goland的操作系统为linux go env找到GOOS如果为window就修改为Linux 修改命令为 go env -w GOOSlinux2.打包 在项目根目录下输入 go build main.go然后项目根目录下会出现一个mian的二进制文件 3.上传包 将 main 程序包放到服务的目录下&…

通过 pip 安装自己的代码包

以前通过 pip 安装的时候总是很羡慕,别人的代码使用起来好方便啊,那时候觉得代码要提交到 pip 平台去管理肯定需要审核吧? 后来了解到自己的代码要可以 pip 安装不需要审核,只需要遵循几个步骤就能轻松实现:准备代码包 通过 setuptools 打包 通过 twine 上传 (需要 pypi …

微信小程序使用微信云托管添加自定义域名并转发到pexels.com

背景:我要在小程序上显示pexels.com上的图片,然后我得先把pexels.com的域名添加到小程序的request合法域名中,但是pexels.com是国外的,在国内没有备案所以添加不了。解决方案就是:用一个已经备案好的域名进行转发,转发的服务器我选择的是微信云托管,备案好的域名还需要s…

使用管理员权限打开cmd(命令提示符)的方法 (Windows10)

目录 通过打开运行 Step1 winRStep2 输入cmdStep3 CtrlShiftEnter通过资源管理器 Step1 CtrlShiftEscStep2 鼠标左键点击“文件”Step3 Ctrl鼠标左键点击“运行新任务(N)”通过任务栏搜索框 Step1 在任务栏搜索框里输入“cmd”Step2 鼠标左键点击“以管理员身份运行”在cmd中切…

CI/CD笔记.Gitlab系列.新用户管理

CI/CD笔记.Gitlab系列 新用户管理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_285502…

【stomp 实战】spring websocket用户消息发送源码分析

这一节&#xff0c;我们学习用户消息是如何发送的。 消息的分类 spring websocket将消息分为两种&#xff0c;一种是给指定的用户发送&#xff08;用户消息&#xff09;&#xff0c;一种是广播消息&#xff0c;即给所有用户发送消息。那怎么区分这两种消息呢?那就是用前缀了…