JS sort排序

news2025/2/24 6:14:57

JS sort排序

  • 1.定义及用法
  • 2.不传递任何参数
  • 3.传递a,b
  • 4.传递函数

1.定义及用法

sort() 方法用于对数组的元素进行排序,并返回数组。排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。默认排序顺序是根据字符串UniCode码。

语法:Array.sort(sortBy);

参数sortBy可选,用来规定排序的顺序,但必须是函数。

2.不传递任何参数


在数组中的值为number​类型时,结果并不是和正常排序一样,而是字符编码的出现顺序排列的。

var arr = [2, 6, 8, 8, 2, 10]
console.log(arr.sort())  //[ 10, 2, 2, 6, 8, 8 ]
const str = ['ab', 'bc', 'cs', 'a', 'dc']
console.log(str.sort());  // ['a', 'ab', 'bc', 'cs', 'dc']

在上面的例子中,sort方法中没有传递任何参数,那么他会对数组中的值进行字符编码排序。

3.传递a,b

升序:

var arr = [2, 6, 8, 8, 2, 10]
    arr.sort((a, b) => {
	return a - b
    })
console.log(arr)//[2, 2, 6, 8, 8, 10]

排序:

var arr = [2, 6, 8, 8, 2, 10]
    arr.sort((a, b) => {
	return b - a
    })
console.log(arr)//[ 10, 8, 8, 6, 2, 2 ]

追根究底,a指什么?b指什么?内部用怎样的方法实现的排序?

首先改变数组,看一下a指的到底是什么

var arr = [6, 8, 2, 10, 1]
    arr.sort((a, b) => {
    console.log("a:" + a)
    return 1
})
console.log(arr)
//a:8
//a:2
//a:10
//a:1
//[6, 8, 2, 10, 1]

很容易看出a的范围是[arr[1],arr[arr.length-1]]​.另外能看出当函数返回一个正值时,数组并没有发生变化(0也是)

接下来再看一下b指的是什么

var arr = [6, 8, 2, 10, 1]
    arr.sort((a, b) => {
    console.log("b:" + b)
    return -1
})
console.log(arr)
//b:6
//b:8
//b:2
//b:10
//[1, 10, 2, 8, 6]

4.传递函数

var array = [4, 8, 128, 1, 64, 2, 16, 32];
array = array.sort(compare);

function compare(value1, value2) {
  console.log(value1, value2);
  if (value1 < value2) {
    return -1;
  } else if (value1 > value2) {
    return 1;
  } else {
    return 0;
  }
}
console.log(array);

在这里插入图片描述
从上面我们可以得出,value1 获取的是第二个值,value2获取的是第一个值,它大概是这么进行比较的:

  • 若value1 > value2 ,返回1,那么就是就是进行升序排列。
  • 若value1 < value2 ,返回-1,那么就是降序排列,就需要value1在和之前的值在比较一次
  • 当value1既不小于value2也不大于value2,那么它就不进行比较和排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将字符串转换为hex形式

1. 项目中&#xff0c;有个地方要使用MQTTX工具来发布订阅&#xff0c;而客户服务器需要发送的是hex形式的字符串&#xff0c;并且又要在字符串前面添加三个字节&#xff08;第一字节&#xff1a;报文格式&#xff0c;第二第三字节&#xff1a;字符串长度&#xff09;。 2. 奇…

从零开始学习 Java:简单易懂的入门指南之线程同步(三十五)

线程同步 1.线程同步1.1卖票【应用】1.2卖票案例的问题1.3同步代码块解决数据安全问题【应用】1.4同步方法解决数据安全问题【应用】1.5Lock锁【应用】1.6死锁 2.生产者消费者2.1生产者和消费者模式概述【应用】2.2生产者和消费者案例【应用】2.3生产者和消费者案例优化【应用】…

如何避免大语言模型绕过知识库乱答的情况?LlamaIndex 原理与应用简介

本文首发于博客 LLM 应用开发实践 随着 LangChain LLM 方案快速普及&#xff0c;知识问答类应用的开发变得容易&#xff0c;但是面对回答准确度要求较高的场景&#xff0c;则暴露出一些局限性&#xff0c;比如向量查询方式得到的内容不匹配&#xff0c;LLM 对意图识别不准。所…

百度测试开发工程师面试心得

百度测试开发实习生面试心得&#xff1a; 电话面试&#xff1a; 面试官&#xff1a;首先做一下自我介绍吧 我&#xff1a;我是***&#xff0c;来自什么大学&#xff0c;现在大三&#xff0c;在学校期间担任过部长&#xff0c;副主席等职务&#xff0c; 组织举办了很多比赛&…

linux 服务器类型Apache配置https访问

一&#xff1a;查看服务器类型&#xff0c;下载相应的SSL证书 命令&#xff1a;netstat -anp | grep :80 httpd是Apache超文本传输协议(HTTP)服务器的主程序&#xff0c;所以下载Apache证书 二&#xff1a;将证书解压后复制到服务器上 三个文件&#xff1a;xxx.key xxx_publ…

PFSK152 3BSE018877R1 有源滤波器的定义

PFSK152 3BSE018877R1 有源滤波器的定义 有源滤波器是以晶体管和运算放大器为基本元件设计的滤波电路。除了这些元件&#xff0c;有源滤波器的电路还包含电阻和电容&#xff0c;但不包含电感。 我们知道滤波器具有频率选择性。因此&#xff0c;有源滤波器电路使用晶体管和运算…

《FAQ专场 | smardaten及应用软件的运维管理(上)》

近期smardaten新睿友增长迅速&#xff0c;睿睿收到了越来越多的问题咨询&#xff0c;真真切切感受到了大家对smardaten的好奇和喜欢。 必须给足咱们睿友安全感&#xff0c;所以睿睿把大家问的多的问题都整理了&#xff0c;陆续以FAQ专场形式给大家统一解答。 本期FAQ是《smar…

【开源】基于正点原子alpha开发板的第三篇系统移植

系统移植的三大步骤如下&#xff1a; 系统uboot移植系统linux移植系统rootfs制作 一言难尽&#xff0c;踩了不少坑&#xff0c;当时只是想学习驱动开发&#xff0c;发现必须要将第三篇系统移植弄好才可以学习后面驱动&#xff0c;现将移植好的文件分享出来&#xff1a; 仓库&…

Android之SpannableString使用

文章目录 前言一、效果图二、实现代码总结 前言 在开发中&#xff0c;往往有些需求是我们不愿意遇到的&#xff0c;但是也不得不处理的事情&#xff0c;比如一段文案&#xff0c;需要文案中某些文字变颜色或者点击跳转&#xff0c;所以简单写了几句代码实现&#xff0c;没什么…

备战蓝桥杯,那你一定得打这场免费且有现金奖励的算法双周赛!

失踪人口回归&#xff0c;好久没在CSDN上与大家交流了。因为在蓝桥开了一些课程&#xff0c;我的重心已经完全转向读研究生和教授课程。今天&#xff0c;我想向大家推荐一个竞赛&#xff0c;考虑到大家已经学习了很长时间的算法&#xff0c;这个竞赛将为你提供一个不仅可以实现…

ros学习笔记(1)Mac本地安装虚拟机,安装Ros2环境

Ros与Linux的关系 Ros环境基于Linux系统内核 我们平时用的是Linux发行版&#xff0c;centos&#xff0c;ubuntu等等&#xff0c;机器人就用了ubunut 有时候我们经常会听到ubunue的版本&#xff0c;众多版本中&#xff0c;有一些是长期维护版TLS&#xff0c;有一些是短期维护…

如何使用自动化工具编写测试用例?

在快速变化的软件开发领域&#xff0c;保证应用程序的可靠性和质量至关重要。随着应用程序复杂性和规模的不断增加&#xff0c;仅手动测试无法满足行业需求。 这就是测试自动化发挥作用的地方&#xff0c;它使软件测试人员能够提高效率、增加测试覆盖率并自信地交付高质量的产品…

嵌入式学习笔记(54)S5PV210的ADC控制器

11.3.1 ADC和&#xff08;电阻式&#xff09;触摸屏的关系 (1)ADC在210数据手册的section 10.7 (2)电阻式触摸屏本身工作时就依赖于AD转换&#xff0c;所以在210的SoC中电阻触摸屏接口本身和ADC接口是合二为一的。或者说电阻触摸屏接口使用了&#xff08;复用了&#xff09;A…

C语言_用于ADC数据的均值滤波算法

C语言_用于ADC数据的均值滤波算法 说明&#xff1a; 在采集ADC值的时候一般都是多次采集然后&#xff0c;然后取平均值&#xff0c;改进型做法就是去掉最大最小值剩下的再取平均值 unsigned short average(unsigned short arr[], unsigned char size) {unsigned int sum 0;for…

CVE-2020-36189 jackson-databind java反序列化漏洞

漏洞原理 jackson-databind是一套开源的java序列化与反序列化工具框架&#xff0c;可将java对象序列化为xml和json格式的字符串及提供对应的反序列化过程。由于其解析效率较高&#xff0c;目前是Spring MVC中内置使用的解析方式&#xff0c;该漏洞的触发条件是ObjectMapper反序…

JUC第二十八讲:JUC工具类: Semaphore详解

JUC工具类: Semaphore详解 本文是JUC第二十八讲&#xff0c;JUC工具类: Semaphore详解。Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量&#xff0c;它允许n个任务同时访问某个资源&#xff0c;可以将信号量看做是在向外分发使用资源的许可证…

智源发布最强开源可商用中英文语义向量模型 BGE,超越同类模型,解决大模型制约问题

0.介绍 语义向量模型(Embedding Model)已经被广泛应用于搜索、推荐、数据挖掘等重要领域。 在大模型时代,它更是用于解决幻觉问题、知识时效问题、超长文本问题等各种大模型本身制约或不足的必要技术。然而,当前中文世界的高质量语义向量模型仍比较稀缺,且很少开源。 为…

数字化教育的未来:数字孪生技术助力校园创新

随着科技的飞速发展&#xff0c;智慧校园成为教育领域的新宠。数字孪生技术&#xff0c;作为一项新兴技术&#xff0c;正日益深刻地影响着校园的运营和管理。它为学校提供了前所未有的工具和资源&#xff0c;使校园管理更加高效、智能化。本文将探讨数字孪生技术如何助力智慧校…

LeetCode 1488. 避免洪水泛滥【贪心,二分,有序集合】1973

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

nginx的重定向

nginx重定向--rewrite重写功能介绍 rewrite 的功能介绍 rewrite功能就是&#xff0c;使用nginx提供的全局变量或自己设置的变量&#xff0c;结合正则表达式和标记位实现URL重写以及重定向。 比如&#xff1a;更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需…