语法: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. pikachu-SQL注入漏洞

    一.SQL Inject 漏洞原理概述 1.1 什么是数据库注入漏洞     数据库注入漏洞,主要是开发人员在构建代码的时候,没有对用户输入的值的边界进行安全的考虑,导致攻击者可以通过合法的输入点提交 ...

  2. centos 7.6 docker 安装 nextcloud -使用sqlite数据库

    docker search nextcloud docker pull docker.io/nextcloud docker images mkdir /home/nextcloud chmod -R ...

  3. 没有正确配置扫描包,提示spring的bean不存在

    如下提示的解决方案: <!-- 扫描org.infor包下面的java文件,有Spring的相关注解的类,则把这些类注册为Spring的bean -->  <context:comp ...

  4. Notability

    Notability 上课记笔记.听网课→Notability 有录音功能, 在原来笔记中新添加空白行(选中之后下移) Notability常用的功能总结 1.纸张有颜色2.荧光笔会盖住文字3.套索工 ...

  5. PTA 1005 Spell It Right

    题目描述: Given a non-negative integer N, your task is to compute the sum of all the digits of N, and ou ...

  6. 数字孪生 VS 平行系统

    数字孪生和平行系统作为新兴技术,在解决当今人工智能邻域面临的信息量大,干扰信息不确定因素多,与人的参与沟通更加紧密,人机互动更加重视,为了使人们有更好的体验人工智能带来的便利,急需推动信息物理社会的高 ...

  7. 剑指offer-面试题7-重建二叉树-二叉树

    /* 题目: 输入二叉树的前序遍历和中序遍历的结果,重建二叉树.假设输入的前序遍历和中序遍历的结果中不包含重复的数字. */ /* 思路: 使用前序遍历找到根节点,再通过中序遍历找到左子树和右子树. ...

  8. 敏捷@Scrum基础知识

    敏捷,用以概括一套全新的软件开发价值观:敏捷宣言由价值观和原则组成. (一)敏捷核心价值观 敏捷宣言 个体和交互        胜过      过程和工具 可以工作的软件    胜过      面面俱 ...

  9. CCS 5.5下载地址http://www.dianyuan.com/bbs/1492792.html

    http://www.dianyuan.com/bbs/1492792.html https://pan.baidu.com/s/1eQtIRK2?errno=0&errmsg=Auth%20 ...

  10. ubuntu set up 6 - NTFS Mount

    1. NTFS Mounted as read-only https://askubuntu.com/questions/1138076/ubuntu-18-04-cant-write-on-ntfs ...