|
.sort() 是数组对象内置的一个排序方法,可以对数组内部的元素按照某种规则进行排序。
.sort()是一个方法(函数),可以被数组调用,所以他肯定与其他普通函数一样,可能拥有参数和返回值。 .sort()可以接受一个函数作为可选参数。 arr.sort(); //不传入参数则按照默认方式进行排序(按照字符编码的顺序进行排序)。 arr.sort(function(a,b){ }) 传入的函数以数组中的元素作为两个参数。 上面稍微有点绕,可以理解为.sort()方法会对数组进行遍历,并且每次遍历会传入当前元素和下一个元素作为参数到function(a,b){ }中。 function(a,b){ }需要一个返回值,如果返回值大于0,则 a 元素排在 b 元素的后面,否则 a 元素排在 b 元素的前面。 因此当我们传入 function(a,b){ return a - b; } 时,就能对原数组进行升序排序,反之,当返回值为 return b - a;时对数组进行降序排序。 知道了上面的原理后,我们可以进行一些更复杂一点的应用。 代码如下: let a = [{'姓名':'张三','年龄':22},{'姓名':'李四','年龄':25},{'姓名':'王花花','年龄':19}]; function older(a,b){ return a['年龄'] - b['年龄']; } a.sort(older); console.log(a); 以上数组 a 的子元素是存储了个人性别和年龄信息的对象,通过定义传入.sort()的函数,实现了对数组 a 中的对象按照年龄大小进行排序。 |
|
|
沙发#
发布于:2019-02-20 20:39
.sort()方法复写。
function mySort(arr,fn) { for(let i=1,n=arr.length; i<n; i++){ if(fn(arr[i-1],arr [ i ] )>0){ arr.splice(i-1,2,arr[ i ],arr[i-1]); (i>1)&&(i=i-2); } } } 测试: let arr = [3,1,5,2,4,7,3,-5,0,-9]; mySort(arr,function (a,b) { return b - a; }); console.log(arr); 结果:[7,5,4,3,3,2,1,0,-5,-9] let a = [{'姓名':'张三','年龄':22},{'姓名':'李四','年龄':25},{'姓名':'王花花','年龄':19}]; mySort(a,function (a,b) { return a['年龄'] - b['年龄']; }); console.log(a); 结果:[{'姓名':'王花花','年龄':19},{'姓名':'张三','年龄':22},{'姓名':'李四','年龄':25}] 说明:mySort()函数接收两个参数,第一个参数为需要排序的数组,第二个参数为排序函数(该函数接收遍历原数组的两个元素,返回值大于0则从小到大排序,反之从大到小排序)。 |
|