JavaScript中对象数组排序的通用操作和取巧操作其实大可不必,JS原生的Array.sort可以直接进行一些复杂而漂亮的排序。在本文中,将介绍Array.sort的一些通用排序和一些棘手的操作。基本数组排序默认情况下,Array.sort函数将数组中每个需要排序的元素转换为字符串,并按Unicode顺序进行比较。constfoo=[9,1,4,'zebroid','afterdeck'];富。种类();//返回[1,4,9,'afterdeck','zebroid']constbar=[5,18,32,newSet,{user:'EleanorRoosevelt'}];bar.sort();//returns[18,32,5,{user:'EleanorRoosevelt'},Set{}]你可能很好奇什么是32排在5之前。发生这种情况是因为数组中的每个元素首先被转换为字符串,在Unicode顺序中,“32”出现在“5”之前。需要注意的是Array.sort会改变原来的数组。constbaz=['我的猫吃了我的作业',37,9,5,17];baz.sort();//baz数组被修改console.log(baz);//shows[17,37,5,9,'Mycatatemyhomework']为了避免这种情况,我们可以创建一个新的待排序数组实例,然后对新数组进行修改。在这里您可以使用Array.slice返回一个新的Array实例。//创建baz数组的新实例并对其进行排序constsortedBaz=baz.slice().sort();我们也可以使用ES6中的扩展运算符来实现:constsortedBaz=[...baz].sort();在这两种情况下,输出是相同的:console.log(baz);//['我的猫吃了我的作业',37,9,5,17];控制台日志(sortedBaz);//[17,37,5,9,'Mycatatemyhomework']Array.sort本身无法对对象数组进行排序。不过不用担心,sort还提供了一个参数,可以根据比较函数的返回值对数组元素进行排序。使用比较函数排序假设foo和bar是比较函数要比较的两个元素,比较函数的返回值设置如下:小于0:foo在bar之前大于0:bar等于0在foo之前:foo和bar保持彼此不同的变化。让我们看一个简单的例子:constnums=[79,48,12,4];函数比较(a,b){如果(a>b)返回1;如果(b>a)返回-1;返回0;}nums.sort(compare);//=>4,12,48,79我们可以稍微重构一下:functioncompare(a,b){returna-b;}使用箭头函数重构:nums.sort((a,b)=>a-b);如何对对象数组进行排序现在,让我们对对象数组进行排序。假设以下歌手数组:constsingers=[{name:'StevenTyler',band:'Aerosmith',born:1948},{name:'KarenCarpenter',band:'TheCarpenters',born:1950},{name:'KurtCobain',band:'Nirvana',born:1967},{name:'StevieNicks',band:'FleetwoodMac',born:1948},];我们可以使用compare功能,然后根据singers中的band字段来排序。functioncompare(a,b){//使用toUpperCase()忽略字符大小写constbandA=a.band.toUpperCase();constbandb=b.band.toUpperCase();让比较=0;如果(bandA>bandB){比较=1;}elseif(bandA
