关于JavaScript数组排序(sort)

    我们都知道js中数组的sort方法,他可以对数组进行排序。具体的排序依据这里不多赘述想要了解的请锁定目标按下F键...哦不,请点击传送门。(此门内包含JS十八般武艺)

    sort方法可以选填一个参数,这个参数是个函数,它定义了排序的规则。我们先来看不定义排序规则的sort使用案例。

    

var arr = [10, 5, 40, 25, 1000, 1]
arr.sort()
console.log(arr) // [ 1, 10, 1000, 25, 40, 5 ]

    这里定义了一个数组 arr,我想用sort方法对他进行排序。本以为会从小到大排序,结果却并不是想象的那样。因为你并没指定排序规则,那么那么元素会按照它转换为的字符串的诸个字符的Unicode位点进行排序。例如 "Banana" 会被排列到 "cherry" 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 "80" 要比 "9" 要靠前。                                ——这段话摘自传送门。

    那么我们就明白了,就像骑马,要想驾驭一匹马,先要配上鞍绳。那就来定义排序规则。

    

function sortNumber(a, b)
{
    return a - b
}

var arr = [10, 5, 40, 25, 1000, 1]
arr.sort(sortNumber)
console.log(arr) //[ 1, 5, 10, 25, 40, 1000 ]

   拿到了想要的结果。重点看一下sortNumber这个函数。里边只有一句‘return a - b’。

   如果指明了 排序函数,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 sortNumber(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 sortNumber(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 sortNumber(a, b) 大于 0 , b 会被排列到 a 之前。
  • sortNumber(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

    以上摘自传送门。

    所以想了解sort的前世今生请速去传送门

    我改了一下sortNumber函数。

function sortNumber(a, b)
{
    console.log(a, b)
    return a - b
}

var arr = [10, 5, 40, 25, 1000, 1]
arr.sort(sortNumber)

因为我想看一下sort到底是怎样排序的。打印结果:


    果然算法还是重要的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值