文档章节

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

o
 osc_g8254g7s
发布于 2019/08/21 15:42
字数 415
阅读 9
收藏 0

语法: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。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

在virtualenv中使用Python 3 - Using Python 3 in virtualenv

问题: Using virtualenv , I run my projects with the default version of Python (2.7). 使用virtualenv ,我使用默认版本的Python(2.7)运行项目。 On one project, I need to use Pyth......

富含淀粉
24分钟前
9
0
Python的__init__和self是做什么的? - What __init__ and self do on Python?

问题: I'm learning the Python programming language and I've came across something I don't fully understand. 我正在学习Python编程语言,遇到了一些我不太了解的东西。 In a method ......

javail
54分钟前
15
0
OSChina 周五乱弹 —— 你大妈还是你大妈

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @watergood:是时候分享一波我的这张纯音乐歌单了,过去的五年多时间里,我陆陆续续地把听到的好听的纯音乐添加了进去,目前一共65首,相信总...

小小编辑
今天
25
0
在Objective-C中生成随机数 - Generating random numbers in Objective-C

问题: I'm a Java head mainly, and I want a way to generate a pseudo-random number between 0 and 74. In Java I would use the method: 我主要是Java头,我想要一种生成0到74之间的伪随......

技术盛宴
今天
13
0
ftp-ftps-sftp的关系

Ftp FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作...

独钓渔
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部