在JavaScript中排序主要用到的api就是sort了,但是使用sort有几个坑需要注意,让我们一起来看看

排序原理-不使用参数时

sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。

默认排序顺序为按字典升序。

在不使用参数时,sort使用的是字典排序

如果数组中元素都是字符串,这点很好理解,比如:

var arr= new Array(); //创建一个空数组
arr= ['sun','xu','ma','he','wang','zhang'];
arr.sort(); //调用sort方法 

输出结果为:

he
ma
sun
wang
xu
zhang 

但是如果是数字呢?让我们来看看:

var a = new Array();
a = [1,10,100,5,25,99];
a.sort(); 

输出结果为:

1
10
100
25
5
99 

令人费解。。。但其实如果知道其原理就很容易理解,sort默认是按照字典顺序排序的;

字典序

字典序(dictionary order),又称 字母序(alphabetical order),原意是表示英文单词在字典中的先后顺序,在计算机领域中扩展成两个任意字符串的大小关系。

英文中的 字母表(Alphabet) 按照如下的顺序排列:

ABCDEFG HIJKLMN OPQRST UVWXYZ

abcdefg hijklmn opqrst uvwxyz

在字典中,单词是按照首字母在字母表中的顺序进行排列的,比如 alpha 在 beta 之前。而第一个字母相同时,会去比较两个单词的第二个字母在字母表中的顺序,比如 account 在 advanced 之前,以此类推。下列单词就是按照字典序进行排列的:

as

aster

astrolabe

astronomy

at

ataman

attack

baa

在计算机领域中,这个字典序就不仅仅用来比较英文单词了,而是比较任意字符串。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如ah1x小于ahb,Z5小于a3,10小于101等

排序原理-使用参数

在大多数情况下,我们需要将数组中的数字按大小排序,就必须使用一个函数

使用数字排序,你必须通过一个函数作为参数来调用;函数指定数字是按照升序还是降序排列

// 数组排序 sort
let arr=[1,8,2,6,9,12,64,86,3,5,4,9,4]
console.log('-------------------------这是升序--------------------');
console.log(arr.sort(sort_s));
console.log('-------------------------这是降序--------------------');
console.log(arr.sort(sort_j));
// 升序
function sort_s(a,b){return a-b;
}
// 降序
function sort_j(a,b){return b-a;
} 

输出结果为:

原生JS之sort排序方法详解

注意事项

这种方法会改变原始数组! 这种方法会改变原始数组!这种方法会改变原始数组!重要的事情说三遍,排完后会直接影响原数组,并且元素不会进行复制,也就是说,sort()的返回值为原数组的引用,例如:

let arr=new Array()
arr=[2,4,1,8,5,3]
let arrt=arr.sort((a,b)=>a-b)
console.log(arr===arrt)//true 

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。
原生JS之sort排序方法详解
原生JS之sort排序方法详解
原生JS之sort排序方法详解
原生JS之sort排序方法详解

有需要的小伙伴,可以点击下方卡片领取,无偿分享

发表回复