关于利用JavaScript中的sort方法实现自定义排序

众所周知,javascript中的sort方法可以实现排序,但是如果只是使用默认的方法,很难拿到理想的结果

默认用法:

const arr = [1, 3, 2, 12, 5, 9, 1]
arr.sort()
console.log('排列的信息', arr); // [1, 1, 12, 2, 3, 5, 9],可以看到结果并不是我们想要的,因为sort默认会将数组中内容转为字符串形式比较

可以看到,对于数组集合的排序,往往并不能得到我们想要的结果,因为sort默认会将数组中内容转为字符串形式比较。
所以需要实现自定义的排序,而刚好sort方法支持传入一个函数,若该函数返回负数,则说明当前值较小,排到前面,若为0,位置不变,若为大于0的数,则将当前值往后排。

对数字数组的排序

const arr = [1, 3, 2, 12, 5, 9, 1]
arr.sort((a, b) => a - b)
console.log(arr); // [1, 1, 2, 3, 5, 9, 11]

对象数组的排序

同理,对于对象数组,也可以根据对象中的具体内容进行自定义排序:

const arr2 = [
      {value: 1, name: 'a'},
      {value: 3, name: 'b'},
      {value: 2, name: 'c'},
      {value: -1, name: 'd'}
    ]
    function compareNum(a, b) {
      if (a.value - b.value < 0) {
        return -1
      } else if (a.value == b.value) {
        return 0
      } else {
        return 1
      }
    }
    arr2.sort(compareNum)
    console.log(arr2);

上面的代码返回的数组将以value值从小到大排序

对字符串进行排序

当我们用默认方法对字符串进行排序时:

 const arr = ['Anna', 'alice', 'bob', 'Bob', 'back']
 console.log('默认排序', arr3.sort());

得到的结果是:[‘Anna’, ‘Bob’, ‘alice’, ‘back’, ‘bob’]
因为sort()方法比较字符串的时候,其实是比较字符串对应的ASCII码。B对应的ASCII码是66,而a对应的是97。所以B会排在a的前面。那么这个时候我们就要传入自定义函数来比较了。

const arr = ['Anna', 'alice', 'bob', 'Bob', 'back']
arr.sort((a, b) => {
  if (a.toLowerCase() < b.toLowerCase()) {
    return -1
  } else if (a.toLowerCase() === b.toLowerCase()) {
    return 0
  } else {
    return 1
  }
})

得到结果:[‘alice’, ‘Anna’, ‘back’, ‘Bob’, ‘bob’]
如果想要在首字母相同的情况下,小写字母的排在前面,则需要用到localeCompare方法:

const arr = ['Anna', 'alice', 'bob', 'Bob', 'back']
arr.sort((a, b) => a.localeCompare(b))

结果为:[‘alice’, ‘Anna’, ‘back’, ‘bob’, ‘Bob’]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值