java sort源码(原生JS之sort排序方法详解)
在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; }输出结果为:
注意事项
这种方法会改变原始数组! 这种方法会改变原始数组!这种方法会改变原始数组!重要的事情说三遍 ,排完后会直接影响原数组 ,并且元素不会进行复制 ,也就是说 ,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个技巧》。内容比较详实 ,对各个知识点的讲解也十分到位 。
有需要的小伙伴,可以点击下方卡片领取 ,无偿分享
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!