原文:使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序 - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/javascript/sort-array-result/

题目描述:

使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序,输出结果

  • 知识点:
  • 根据MDN上对Array.sort()的解释,默认的排序方法会将数组元素转换为字符串,然后比较字符串中字符的UTF-16编码顺序来进行排序。所以’102’ 会排在 ‘15’ 前面。以下是MDN中的解释原文:

解题:

  • 思路一:
    [3, 15, 8, 29, 102, 22].sort(function(a,b) {
      return a-b;
    })
    // 输出: [3, 8, 15, 22, 29, 102]
    
  • 思路二:

  • sort 函数,可以接收一个函数,返回值是比较两个数的相对顺序的值
  • 1.默认没有函数 是按照 UTF-16 排序的,对于字母数字 你可以利用 ASCII 进行记忆
 [3, 15, 8, 29, 102, 22].sort();

// [102, 15, 22, 29, 3, 8]
  • 2.带函数的比较
    [3, 15, 8, 29, 102, 22].sort((a,b) => {return a - b});
    
  • 返回值大于0 即a-b > 0 , a 和 b 交换位置
  • 返回值大于0 即a-b < 0 , a 和 b 位置不变
  • 返回值等于0 即a-b = 0 , a 和 b 位置不变
  • 对于函数体返回 b-a 可以类比上面的返回值进行交换位置

扩展阅读: