题目描述:
使用 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 可以类比上面的返回值进行交换位置
扩展阅读: