数组排序sort()方法

news/2024/11/29 4:32:35/

sort() 方法对数组的项目进行排序。 

排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。

默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。

 

一、语法

array.sort(compareFunction)

 注释:sort() 方法会改变原始数组。

二、参数

可选。定义替代排序顺序的函数。

该函数应返回负值、零值或正值,具体取决于参数,例如:

function(a, b){ return a-b }

sort() 方法比较两个值时,将值发送给比较函数,根据返回的(负、零、正)值对值进行排序。

举例,a和b 两个将要被比较的元素:

如果 a-b 小于 0 ,那么 a 会被排列到 b 之前。

如果 a-b 等于 0 , a 和 b 的相对位置不变。

如果 a-b 大于 0 , b 会被排列到 a 之前。

简单的理解,就是: a-b升序         b-a 降序 

三、返回值 

排序后的数组。请注意,数组已原地排序,并且不进行复制。

四、应用

1、 未指明参数时

元素会按照转换为的字符串的各个字符的Unicode位点进行排序。

①  非数字:字符串排序,可以直接使用sort()方法

var fruits = ["Banana", "Orange", "Apple", "Mango", "Blueberries"];
fruits.sort(); // ["Apple", "Banana", "Blueberries", "Mango", "Orange"]
var arr = ['h','a','k','c','e'];
arr.sort();
console.log(arr)  // ["a", "c", "e", "h", "k"]

按字母顺序对数组进行排序,然后反转排序项的顺序(降序):

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
console.log(fruits) //  ["Orange", "Mango", "Banana", "Apple"]

② 数字 

var arr = [12, 22, 66, 3]
arr.sort()
console.log(arr) // [12, 22, 3, 66]

2、指明了参数时

数组会按照调用该函数的返回值进行排序

 ① 按 升序 对数组中的数字进行排序:a-b

var points = [4, 10, 1, 5, 25, 10];
points.sort(function(a, b){ return a-b });
console.log(points) // [1, 4, 5, 10, 10, 25]

 ② 按 降序 对数组中的数字进行排序:b-a

var points = [4, 10, 1, 5, 25, 10];
points.sort(function(a, b){ return b-a });
console.log(points) // [25, 10, 10, 5, 4, 1]

③ 获取数组中的最小值

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){ return a-b });    // 按升序对数组中的数字进行排序// 数组中的第一项 (points[0]) 现在是最小值

 ④ 获取数组中的最大值

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){ return b-a });    // 按降序对数组中的数字进行排序// 数组中的第一项 (points[0]) 现在是最大值

 ⑤ 根据对象的某个属性进行排序:

var arr = [{ name: 'W', age: 21 },{ name: 'M', age: 37 },{ name: 'X', age: 18 },{ name: 'M', age: -12 },{ name: 'J', age: 15 },{ name: 'B', age: 19 }];// 依据age排序
arr.sort(function(a, b) {return(a.age - b.age)
});
console.log(arr); // 0: {name: "M", age: -12}// 1: {name: "J", age: 15}// 2: {name: "X", age: 18}// 3: {name: "B", age: 19}// 4: {name: "W", age: 21}// 5: {name: "M", age: 37}// 依据name排序
arr.sort(function(a,b) {var nameA = a.name;var nameB = b.name;if(nameA < nameB) {return -1;}if(nameA > nameB) {return 1;}return 0;
})
console.log(arr); // 0: {name: "B", age: 19}// 1: {name: "J", age: 15}// 2: {name: "M", age: -12}// 3: {name: "M", age: 37}// 4: {name: "W", age: 21}// 5: {name: "X", age: 18}

⑥ 非ASCII字符排序(如类似 e, é, è, a, ä 等字符的字符串)

一些非英语的字符串,需要使用 String.localeCompare

var a = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
a.sort(function (a, b) {return a.localeCompare(b);
});console.log(a); // ["adieu", "café", "cliché", "communiqué", "premier", "réservé"]

 ⑦ 使用映射对含有大小写的字符串进行排序

    // 需要被排序的数组var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];// 对需要排序的数字和位置的临时存储var mapped = list.map(function(el, i) {return { index: i, value: el.toLowerCase() };})console.log(mapped) // 0: {index: 1, value: "delta"}// 1: {index: 3, value: "alpha"}// 2: {index: 2, value: "charlie"}// 3: {index: 0, value: "bravo"}// 按照多个值排序数组mapped.sort(function(a, b) {return +(a.value > b.value) || +(a.value === b.value) - 1;});console.log(mapped) // 0: {index: 1, value: "alpha"}// 1: {index: 3, value: "bravo"}// 2: {index: 2, value: "charlie"}// 3: {index: 0, value: "delta"}// 根据索引得到排序的结果var result = mapped.map(function(el){return list[el.index];});console.log(result); // ["alpha", "bravo", "CHARLIE", "Delta"]

 

 


http://www.ppmy.cn/news/62777.html

相关文章

【SWAT水文模型】SwatWeather软件使用教程

SwatWeather软件使用教程 1 SwatWeather天气模型发生器1.1 数据输入 2 各功能介绍2.1 计算降水2.2 计算气温2.3 计算辐射2.4 计算风速2.5 计算露点 参考 1 SwatWeather天气模型发生器 SwatWeather.exe 软件只要输入一定格式要求的文件&#xff0c;就可以根据提示进行所需 数据…

React初识

概述 React 是用于构建用户界面的 JS 库。React 是 MVC 中薄薄的一层 V&#xff0c;把数据变成 DOM 显示出来&#xff0c;它只关注表现层。React 原生就是函数 虚拟 DOM 特点 单向数据流 兼容性更好&#xff1a;支持IE8 JSX语法&#xff1a;处理数据和 DOM 之间的关系&…

画图以及代码分析结合的循环队列的实现

循环队列的实现 概念以及结构实现初始化判空判满入队出队从队头获得元素从队尾获得元素释放 概念以及结构 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”…

17.provide.inject.下

学习要点&#xff1a; 1.provide.inject 本节课我们来要了解一下 Vue3.x 中的 provide.inject(提供.注入)功能&#xff1b; 一&#xff0e;provide.inject 1. 使用 Composition API&#xff0c;也是使用 import 导入来实现的&#xff1b; // App.vue import { ref, provide } f…

uni-app nvue页面中使用video视频播放组件

我遇到的问题是&#xff0c;在nvue页面引用video组件&#xff0c;然后啥也没显示的&#xff0c;显示了无法控制播放&#xff0c;折腾了好久&#xff0c;在这里记录下来&#xff01;希望可以帮助到需要的人 我的代码是这样的&#xff08;src换成官方的举例&#xff09; <vi…

Vue面试题:30道含答案和代码示例的练习题

Vue中的双向数据绑定是怎么实现的&#xff1f; 双向数据绑定通过使用v-model指令实现。v-model指令会在表单元素上创建一个监听器&#xff0c;在用户输入时实时更新Vue实例的数据&#xff0c;并且在Vue实例数据变化时更新表单元素的值。 如何在Vue中定义一个方法&#xff1f;…

【英语】大学英语CET考试,阅读部分1(阅读概述,SectionC仔细阅读140)

文章目录 1、阅读概述1.1 考试概况&#xff1a;大纲解读备考策略1.2 做题原则&#xff1a;定位1.3 标点符号和句子逻辑1.4 一级词汇 2、细节题&#xff08;10题占9题&#xff09;2.1 逻辑关系&#xff08;并列和递进&#xff0c;同一方向&#xff09;2.2 逻辑关系&#xff08;转…

数据库中全局锁、表级锁、行级锁的区别

一、全局锁&#xff08;锁数据库&#xff09; 会阻塞整个数据库的所有操作&#xff0c;只允许一个用户对数据库进行写操作&#xff0c;其他用户无法对数据库进行读写操作。经常用于对整个数据库进行备份或恢复等操作。 二、表级锁&#xff08;锁表&#xff09; 针对特定表的锁…