【JS】sort方法的基本使用与双重、多重排序:对象数组按照多个对象属性进行排序

一、sort():用于对数组的元素进行排序,并返回数组,arr.sort()默认为升序排列

二、sort()用法

  • arrayObject.sort(sort),参数sort可选,如果调用该方法时不传参数sort,将按照字符编码的顺序进行排序(升序)
let arr = [5,3,1,6,4,2,3];
arr.sort(); // [1, 2, 3, 3, 4, 5, 6]
  • 如需按照其他标准进行排序,就需要提供比较函数,比较函数应该具有两个参数 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)
// [1, 2, 3, 3, 4, 5, 6]

//以上方法是对number数组排序的,如果是string的话则不能用 a-b ,应当如下:
let arr = ["A","cds","esadf","As"];
let result=arr.sort(function(a,b){
   if(a > b){
       return 1;
   }
});
console.log(result)
// ["A", "As", "cds", "esadf"]

三、双重、多重排序:对象数组按照多个对象属性进行排序(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) {
    //s,s1,s3等是你想要排序的属性
      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
        );
      }
    },
// console.log(数组.sort(filterData));
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值