关于JS中的sort()数组数字排序乱序问题以及拓展

sort排序问题

首先, 我们定义一个number 数组, 里面装了15个数, 但我们把它 reverse 后再sort 发现顺序并不是我们想象的那样 从1~15

Tips : sortNumber.sort 之后自身也会更改的

      let sortNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
      console.log(sortNumbers.reverse().sort();

在这里插入图片描述
虽然表面上看着顺序很乱, 其实这也是有规律的, 先是 ‘1’开头 然后是‘2’开头 。所以 sort在对数组进行排序的时候, 是把元素默认成字符串进行相互比较的
但是 如果我们真的要让数组中的数字进行对比该怎么办?
这时 需要我们在sort函数里面添加自己的自定义:

      let sortNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
      console.log(sortNumbers.reverse().sort((a, b) => a - b)); // 反过来就是降序

在b>a时, 返回负数, 反之返回正数。 如果相等的话就会返回0。所以 sort函数就会根据这些返回值的情况对数组进行排序。
在这里插入图片描述

当然我们也可以自定义对某一属性排序

就是在 sort ()里面添加自己写的函数

      const friends = [
        {name: 'jason', age: 30},
        {name: 'timmy', age: 20},
        {name: 'robert', age: 10}, // ES2017 允许在结尾逗号
      ];
      function comparePerson(a, b){
        if (a.age < b.age){
          return -1;
        }
        if(a.age > b.age){
          return 1;
        }
        return 0;
      }
      console.log(friends.sort(comparePerson));  // 注意这个 调用func 是不加 () 的

所以 这个排序非常的自由, 可以自己在方法中相比什么就写什么

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值