js数组自定义排序代码教程
程序员文章站
2022-05-02 12:03:08
数组中已经存在两个可以直接用来重排序的方法:reverse()和sort()。
reverse()方法用于反转数组。
默认情况下,sort()方法按升序排列数组项–...
数组中已经存在两个可以直接用来重排序的方法:reverse()和sort()。
reverse()方法用于反转数组。
默认情况下,sort()方法按升序排列数组项–即最小值在最前面,最大值在最后面。为了实现排序,sort()方法会调用每个数组项的tostring()转型方法,然后比较得到的字符串,以确定如何排序。即使数组的每一项都是数值,sort()方法比较的也是字符串
var values = [0 ,1 , 5, 10 ,15]; values.sort(); console.log(values); // 0,1,10,15,5
sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面
比较函数接受两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数。如下所示:
var stu1 = { name: "python", age: 80, grade: 99, tostring: function () { return this.name + " , " + this.age + " , " + this.grade; } }; var stu2 = { name: "javascript", age: 30, grade: 88, tostring: function () { return this.name + " , " + this.age + " , " + this.grade; } }; var stu3 = { name: "php", age: 18, grade: 59, tostring: function () { return this.name + " , " + this.age + " , " + this.grade; } }; var stu4 = { name: "vb", age: 50, grade: 70, tostring: function () { return this.name + " , " + this.age + " , " + this.grade; } }; var stu5 = { name: "shell", age: 60, grade: 70, tostring: function () { return this.name + " , " + this.age + " , " + this.grade; } }; var stu6 = { name: "java", age: 40, grade: 99, tostring: function () { return this.name + " , " + this.age + " , " + this.grade; } }; var langarr = [stu1, stu2, stu3, stu4, stu5, stu6]; console.log("排序前:" + langarr); console.log("-------------------"); function compare(a, b) { if (a.grade > b.grade) { return -5; } else if (a.grade === b.grade) { return 0; } else { return 5; } } // todo:简单排序,仅仅通过分数进行排序 function cmp(a, b) { if (a.grade > b.grade) { return -5; } else if (a.grade === b.grade) { // return 0; if (a.age < b.age) { return -4; } else if (a.age === b.age) { return a.name.localecompare(b.name); } else { return 4; } } else { return 5; } } // todo:复杂排序,先比较分数,然后是年龄,最后是名字字符串 // langarr.sort(compare); langarr.sort(cmp); console.log("排序后:" + langarr);
输出显示:
排序前:python , 80 , 99,javascript , 30 , 88,php , 18 , 59,vb , 50 , 70,shell , 60 , 70,java , 40 , 99 ------------------- 排序后:java , 40 , 99,python , 80 , 99,javascript , 30 , 88,vb , 50 , 70,shell , 60 , 70,php , 18 , 59
从输出结果可以看到,的确如我们预期:先比较分数,然后是年龄,最后是名字字符串。