Javascript如何同时在两种及其以上的条件尽心排序,可以这样操作

已收录   阅读次数: 679
2021-01-1507:23:00 发表评论
摘要

伯衡君在Edabit上碰到一道有意思的题,大意是一个整数集合,按照两个条件排序,其一是先按照数值位数大的排在前面,相同位数的数再按照正常的数值大小排序,这样的问题肯定是会用到sort()函数,但是该如何使用呢?本篇文章为你解决这个问题……

分享至:
Javascript如何同时在两种及其以上的条件尽心排序,可以这样操作

开篇寄语

伯衡君在Edabit上碰到一道有意思的题,大意是一个整数集合,按照两个条件排序,其一是先按照数值位数大的排在前面,相同位数的数再按照正常的数值大小排序,这样的问题肯定是会用到sort()函数,但是该如何使用呢?本篇文章为你解决这个问题。

内容详情

一般情况下,array.sort()函数直接在默认使用的话,只是单一条件,试举一例:

let arr = [10,2,4,5]
arr.sort((x,y)=>x-y)
console.log(arr)
//输出结果为[2,4,5,10]

来一个实际问题:

创建一个排序函数,它不是按数字顺序而是按数字长度对数字进行排序!这意味着首先对数字最少的数字进行排序,直到数字最多的数字。

numberLenSort([1, 54, 1, 2, 463, 2]) ➞ [1, 1, 2, 2, 54, 463]

numberLenSort([999, 421, 22, 990, 32]) ➞ [22, 32, 999, 421, 990]

numberLenSort([9, 8, 7, 6, 5, 4, 31, 2, 1, 3]) ➞ [9, 8, 7, 6, 5, 4, 2, 1, 3, 31]

如果两个数字的位数相同,则按照它们第一次出现的顺序返回它们(这与正常排序数字不同)。

那么可以这样解决:

const numberLenSort = arr => arr.sort((a,b) => String(a).length-String(b).length);

Okay,已经了解了单一条件的用法后,只需要在其上做一些修改就行了,大致的模版是下面这样:

arr.sort((a,b) => String(b).length-String(a).length || a - b);

是的,这样一来就是按照两种条件进行排序了,如果是两种及其以上的条件呢?则继续加'||'添加条件啦。

或者写成这种样子:

grouperArray.sort(function (a, b) {
    var aSize = a.gsize;
    var bSize = b.gsize;
    var aLow = a.glow;
    var bLow = b.glow;

    if(aSize == bSize)
    {
        return (aLow < bLow) ? -1 : (aLow > bLow) ? 1 : 0;
    }
    else
    {
        return (aSize < bSize) ? -1 : 1;
    }
});

这样一来,不论多少排序条件,你都能轻松搞定了。

  • 我的微信
  • 微信扫一扫加好友
  • weinxin
  • 我的微信公众号
  • 扫描关注公众号
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: