JavaScript sort() 排序的坑详解

媒介:做项目的时刻发明运用sort排序后的代码,在android和ios平台剖析的效果不一样。
《JavaScript sort() 排序的坑详解》

1、先从简朴的最先,人人都晓得sort()函数比较的是ASCII码的大小,而且而且而且:Array的sort()要领默许把一切元素先转换为String再排序,所以就有以下题目。

// baiDu排在了末了:
['Google', 'baiDu', 'Facebook'].sort(); // ['Facebook', 'Google", 'baiDu']

// 没法明白的效果:
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]

效果转换成字符串比较,’10’排在了’2’的前面,由于字符’1’比字符’2’的ASCII码小

2、运用回调函数的毛病

[10, 2, 3, 100, 6, 9].sort((a, b) => {
    return a < b;
});
// 没法明白的效果
[10, 2, 3, 100, 6, 9]

排序前后效果没有变化

题目剖析:
在sort完成的范例中有这么一条 sortFun(a,b) === 0,则有 a === b 且 b === a 。
此时我们再看var sortFun = (a, b) => a < b,它等同于var sortFun = (a, b) => a < b ? 1 : 0。

它有一个隐蔽的破绽:当a >= b时,sortFun(a,b) === 0。而依据范例,经由过程sortFun(a,b) === 0能够推测出a === b,明显这里互相矛盾, 反之亦然(a > b的状况)。

所以比较的时刻最好运用 a – b 或许 b – a

准确写法:

[10, 2, 3, 100, 6, 9].sort((a, b) => {
    return a - b;
});
// 效果
[2, 3, 6, 9, 10, 100]

android 和 ios平台剖析的sort函数完成体式格局差别,不范例的写法能够致使剖析效果差别

    原文作者:zxc19890923
    原文地址: https://segmentfault.com/a/1190000018076819
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞