语法:arrayObject.sort([compareFunction]);参数compareFunction可选。规定排序顺序,必须是函数。

sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点

// compare函数的基本操作
function compare(a, b){
if (根据某种排序标准a小于b) {
return -1
}
   if (根据某种排序标准a大于b) {
return 1
}
   // a === b
   return 0
}

下面来看一个例子:

var students = [
{age: 18, name: "tom"},
{age: 20, name: "jack"},
{age: 19, name: "bob"}
]
// 现在对学生的姓名进行排序
students.sort(
(a, b) => {
return (a.name < b.name) ? -1 : (a.name > b.name) ? 1 : 0
}
)

结果如下↓

把名字换成年龄

// 对学生按年龄进行排序
students.sort(
(a, b) => {
return (a.age < b.age) ? -1 : (a.age > b.age) ? 1 : 0
}
)

这两种排序就等于用了同样的代码,那我们可不可以封装成一个统一的方法呢

来试一下↓

// 统一封装
const sortBy = (key) => {
return (a, b) => {
var result = (a[key] < b[key]) ? -1 : (a[key] > b[key]) ? 1 : 0
return result
}
}

sortBy()函数接收一个参数并返回一个接收两个参数的新函数====(这里就是闭包的强大之处)

下面我们就可以这样使用sort了

students.sort(sortBy("name"))

看看结果↓

和上面在()里写方法的结果一样啊

这样以后我们不管students每条数据有多少个key,我们想按照哪个key排序就输入那个key就可以了

It’s great!

--------------------------------------------------------------------------------------

V8 引擎 sort 函数只给出了两种排序 InsertionSort 和 QuickSort,数量小于10的数组使用 InsertionSort,比10大的数组则使用 QuickSort。

剖析Javascript中sort()使用方法,以及重写sort()里的排序方法,实现自定义排序的更多相关文章

  1. 剖析Javascript中forEach()底层原理,如何重写forEach()

    我们平时用的forEach()一般是这样用的 var myArr = [1,5,8] myArr.forEach((v,i)=>{ console.log(v,i) })//运行后是这样的1 0 ...

  2. 深入剖析JavaScript中的数据类型判断(typeof instanceof prototype.constructor)

    关于JavaScript中的类型判断,我想大部分JavaScripter 都很清楚 typeof 和  instanceof,却很少有人知道 constructor,以及constructor与前面二 ...

  3. Javascript中Array(数组)对象常用的几个方法

    Javascript中Array数组的几个常用方法 pop()  --获取数组中末尾的元素 shift() --获取数组中首位元素 push() --在数组中末尾增加元素 slice()  --按照下 ...

  4. Javascript中双等号(==)隐性转换机制 JS里charCodeAt()和fromCharCode()方法拓展应用:加密与解密

    Javascript中双等号(==)隐性转换机制   在Javascript中判断相等关系有双等号(==)和三等号(===)两种.其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否 ...

  5. JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性

    前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...

  6. JavaScript中闭包实现的私有属性的getter()和setter()方法

    注意: 以下的输出都在浏览器的控制台中 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  7. 深入剖析javaScript中的深拷贝和浅拷贝

    如何区分深拷贝与浅拷贝,简单来说,假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝:我们先看两个简单的案例: //案例1(深拷贝) var a ...

  8. 深入剖析JavaScript中的对象与原始值之间的转换机制

    我们都知道原始值之间是可以互相转换的,但是如果对象转原始值呢? 所有的对象在布尔上下文(context)中均为 true .所以对于对象,不存在 to-boolean 转换, 只有字符串和数值转换. ...

  9. JavaScript中unicode编码与String互转(三种方法)

    1.引言 JS本身就支持unicode转string功能,一共有三种方式和String单个字符转unicode编码. 2.方法 //unicode转String 1. eval("'&quo ...

随机推荐

  1. Linux 使用vim命令编辑文件内容

    在终端可以使用vim命令来直接编辑文件内容. vim,也可以叫做vi. vim有三种模式:命令模式.输入模式.底线命令模式. 命令模式 vim  文件名   进入命令模式,vim也可以写成vi. 如果 ...

  2. linux下tar命令解压到指定的目录

    linux下tar命令解压到指定的目录 : #tar zxvf xx.tar.gz -C /xx//把根目录下的xx.tar.gz解压到/xx/下,前提要保证存在/xx这个目录 这个和cp命令有点不同 ...

  3. 初学Python,需要装什么软件?

    学习Python需要安装什么软件呢?也许你是一位编程小白,还不知道如何如何安装Python软件和开发环境.那么今天我们就来学一下关于Python软件.开发环境的相关知识,希望对你有用. 学Python ...

  4. 【01】HTML_day01_02-认识HTML

    typora-copy-images-to: media 第01阶段.前端基础.认识HTML 学习目标 理解 HTML的概念 HTML标签的分类 HTML标签的关系 HTML标签的语义化 应用 HTM ...

  5. MySql学习-2. NavicatforMySQL 与 MySql的对接以及一些操作:

    1.连接: 2.数据库的创建: 3.数据库中表的创建:    4.表的设计: 4.1 设计表: 4.2 增加数据(自动递增只是保证唯一值,即使数据删除了也是得前进):

  6. MongoDB3.6版本新增特性

    MongoDB3.6版新特性如下: (1)Default Bind to Localhost 从3.6版本开始,在默认情况下,MongoDB二进制文件mongod和mongos绑定到localhost ...

  7. 使用JAVA导出EXCEL表格(POI)

    一.POI概述 Jakarta POI 是一套用于访问微软格式文档的Java API.POI提供API给Java程序对Microsoft Office格式档案读和写的功能.在许多企业办公系统中,经常会 ...

  8. VS GIT 使用入门---我只是搬运工

    网上资料推荐 GitHub 新手详细教程 - Hanani_Jia的博客 - CSDN博客 https://blog.csdn.net/Hanani_Jia/article/details/77950 ...

  9. 牛客练习赛56 E 小雀和他的王国

    题目链接:https://ac.nowcoder.com/acm/contest/3566/E 思路:tarjan缩点,桥重建图,dfs跑树的直径. #include <iostream> ...

  10. 第6章.BitArray类

    参考链接: https://www.cnblogs.com/wang7/archive/2012/04/13/2446353.html https://www.runoob.com/csharp/cs ...