美文网首页
前端如何给数组元素按降序排序

前端如何给数组元素按降序排序

作者: 小遁哥 | 来源:发表于2020-08-15 23:00 被阅读0次

    众所周知,sort 方法默认是为字符串排序的,

    ['a','c','b','e','d'].sort()
    

    结果为

     ["a", "b", "c", "d", "e"]
    

    如果想要降序该怎么做呢,这时候你要用到字符串的localeCompare方法

    ['a','c','b','e','d'].sort((a,b)=>b.localeCompare(a))
    

    结果为

     ["e", "d", "c", "b", "a"]
    

    不知道你是否会在b.localeCompare(a)) 还是 a.localeCompare(b)) 上纠结,所幸,可供的选择不多,死记硬背完全可行,比如

    a在前面是升序,b在前面是降序

    对于数字也是这样的

    [1,5,6,2].sort((a,b)=>a-b)
    (4) [1, 2, 5, 6]
    
    [1,5,6,2].sort((a,b)=>b-a)
    (4) [6, 5, 2, 1]
    

    对于sort方法

    • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    • 若 a 等于 b,则返回 0。
    • 若 a 大于 b,则返回一个大于 0 的值。

    看一个冒泡排序的实现

        for (let i = 0; i < arr.length; i++) {
          for (let j = i; j < arr.length; j++) {
            if (arr[i] > arr[j]) {
              [arr[i], arr[j]] = [arr[j], arr[i]];
            }
          }
        }
    

    sort 方法只是将arr[i] > arr[i + 1] 还是 arr[i] < arr[i + 1] 的决定权交给了我们

    至于sort 方法的实现就更加有趣的,并不是简单的快排,会根据数组的长度、递归的深度等选择不同方式,记得之前写过一篇关于快排的文章 https://www.jianshu.com/p/7186c0b2d23f,相比之下就要简陋的多了。

    相关文章

      网友评论

          本文标题:前端如何给数组元素按降序排序

          本文链接:https://www.haomeiwen.com/subject/hejzdktx.html