开篇寄语
伯衡君在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; } });
这样一来,不论多少排序条件,你都能轻松搞定了。
ArrayArrayArray- 我的微信
- 微信扫一扫加好友
- 我的微信公众号
- 扫描关注公众号