【JS】对象数组按照多个对象属性进行排序(sort方法)
一、sort():用于对数组的元素进行排序,并返回数组,arr.sort()默认为升序排列
二、sort()用法
- arrayObject.sort(sort),参数sort可选,如果调用该方法时不传参数sort,将按照字符编码的顺序进行排序(升序)
let arr = [5,3,1,6,4,2,3];
arr.sort();
- 如需按照其他标准进行排序,就需要提供比较函数,比较函数应该具有两个参数 a 和 b,其返回值如下:
- a < b,数组中的 a 应该出现在 b 之前,则返回-1。
- a ===b,则返回 0。
- a > b,则返回1。
let arr = [5,3,1,6,4,2,3];
let result=arr.sort(function(a,b){
return a-b;
});
console.log(result)
let arr = ["A","cds","esadf","As"];
let result=arr.sort(function(a,b){
if(a > b){
return 1;
}
});
console.log(result)
三、双重、多重排序:对象数组按照多个对象属性进行排序(sort方法)
- 先按学生的总分排序,如果总分相等,我们再按照语文成绩排序,依次类推。
let students = [
{ name: "1", totalScore: 196, Chinese: 100, math: 96 },
{ name: "2", totalScore: 198, Chinese: 99, math: 99 },
{ name: "3", totalScore: 185, Chinese: 88, math: 97 },
{ name: "4", totalScore: 196, Chinese: 96, math: 100 },
{ name: "4", totalScore: 196, Chinese: 98, math: 98 },
{ name: "5", totalScore: 180, Chinese: 90, math: 90 },
];
let result = students.sort((a, b) => {
if (a.totalScore === b.totalScore) {
if (a.Chinese < b.Chinese) {
return 1;
} else if (a.Chinese > b.Chinese) {
return -1;
} else {
return 0;
}
} else {
return b.totalScore - a.totalScore;
}
});
console.log(result);
{ name: "2", totalScore: 198, Chinese: 99, math: 99 },
{ name: "1", totalScore: 196, Chinese: 100, math: 96 },
{ name: "4", totalScore: 196, Chinese: 98, math: 98 },
{ name: "4", totalScore: 196, Chinese: 96, math: 100 },
{ name: "3", totalScore: 185, Chinese: 88, math: 97 },
{ name: "5", totalScore: 180, Chinese: 90, math: 90 },
];
四、多重排序函数封装(还可以更简略,这里我只是举个例子)
filterData(a, b) {
if (a["s"].length === b["s"].length) {
if (a["s1"] == b["s1"]) {
if (a["s3"].length < b["s3"].length) {
return 1;
} else if (a["s3"].length > b["s3"].length) {
return -1;
} else {
return 0;
}
} else {
return b["s1"] - a["s1"];
}
} else {
return (
b["s"].length - a["s"].length
);
}
},