第 43 题:使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序,输出结果
原题目:
使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序,输出结果
我的答案:
[102, 15, 22, 29, 3, 8]
解析:
根据 MDN 上对 Array.sort()
的解释,默认的排序方法会将数组元素转换为字符串,然后比较字符串中字符的 UTF-16 编码顺序来进行排序。所以 '102'
会排在 '15'
前面。以下是 MDN 中的解释原文:
The sort() method sorts the elements of an array in place and returns the array. The default sort order is built upon converting the elements into strings, then comparing their sequences of UTF-16 code units values.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(40)
let numTest = [3, 15, 8, 29, 102, 22];
numTest.sort((a,b) => {
return a-b
})
`/*
@Date:2019/3/28
@last Modified by :max bai
@last Modiified time:2019/3/28
dailyIssue:1
使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序,输出结果
*/
let arr=[102, 15, 22, 29, 3, 8];
let reSort={
desSort:function(arr){
let arrTemp=arr;
let result =arrTemp.sort(function(a,b){
return b-a;
});
console.log(result);
return result;
},
incSort:function (arr){
let arrTemp=arr;
let result=arrTemp.sort(function(a,b){
return a-b;
});
console.log(result);
return result;
}
}
let a=new Array();
let b=new Array();
// 数组赋值方法:1:newArr = [...arr]; 或者2:newArr = arr.slice(0);
a=reSort.desSort(arr).slice(0);
b=reSort.incSort(arr).slice(0);
console.log(a);
console.log(b);
// 打印结果:
// [102, 29, 22, 15, 8, 3]
// [3, 8, 15, 22, 29, 102]
// [102, 29, 22, 15, 8, 3]
// [3, 8, 15, 22, 29, 102]
`
arr.sort([compareFunction])
compareFunction 用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
Array.prototype.sortAsc=function(){return this.sort((a,b)=>a-b)};
Array.prototype.sortDesc=function(){return this.sort((a,b)=>b-a)};
[3, 15, 8, 29, 102, 22].sortAsc();
[3, 15, 8, 29, 102, 22].sortDesc();
let arr = [2, 15, 8, 29, 102, 22];
arr.sort (( a, b ) => {
return b - a;
})
console.log(arr);
// [ 102, 29, 22, 15, 8, 2 ]
从小到大
[3, 15, 8, 29, 102, 22].sort((a,b) => a-b)
从大到小
[3, 15, 8, 29, 102, 22].sort((a,b) => b-a)
补充一个奇怪的,在新版本的chrome和node中, 这样是不能排序的
Safari中是OK的
这个是可以的,这是箭头函数的写法
[3, 15, 8, 29, 102, 22].sort( (a,b) =>{
if(a - b){
return 1
}else{
return -1
}
})
漂亮 小姐姐
你们真是一群妖怪
[3,15,8,29,102,22].sort((a,b)=>a-b)
//output [3,8,15,22,29,102]
arr.sort()
等同于arr.sort( (a , b) => a.charCodeAt() - b.charCodeAt() )
看起来头像对点赞数影响很大
[3, 15, 8, 29, 102, 22].sort((a,b)=>{
return a-b
})
chrome中尝试了,的确不行,不知道什么原因
这种用法是不符合规范的,compareFunction 的返回值会和0作比较,引用MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
如果没有指明 compareFunction ,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。例如 "Banana" 会被排列到 "cherry" 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 "80" 要比 "9" 要靠前。
如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
02-使用sort() 对数组进行排序 - 【3,15,8,29,102,22】
sort()
方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的采用的
utf-16
,常见的字符数字
英语大小写
汉字
总结
数字》英语大写》英语小写》汉字
阮老师 字符编码
步骤
案例
sort(): [102, 15, 22, 29, 3, 8]
sort((a,b)=> a-b): [3, 8, 15, 22, 29, 102]
[3, 15, 8, 29, 102, 22].sort(new Function(
a
,b
,b-a
))var arr2 = ['b','a','c','d','o']
arr2.sort()
输出["a", "b", "c", "d", "o"],因为没有函数时会进行UTF-16编码的比较,小的排前面,
当需要对数字从大到小排序时,一般要加入函数
a-b小于0时,会把a和b的位置互换,所以这样排序会把大的数放后面,小的放前面
题目对数字直接用了sort(),没有加函数,会进行UTF-16编码的比较,
所以答案是:
[102, 15, 22, 29, 3, 8]
应该默认没有回调函数的,[102, 15, 22, 29, 3, 8]
arr.sort((a,b) =>{
return a-b
})
let arr = [3, 15, 8, 29, 102, 22];
let newArr = arr.sort((a,b)=>{
return a - b;
})
console.log(newArr)
不知道你要正序还是倒叙,而且这个面试题有点简单
let ary = [3, 15, 8, 29, 102, 22]
ary.sort() // 输出结果为[102, 15, 22, 29, 3, 8],原因是因为sort()默认根据字符编码排序
sort
函数,可以接收一个函数,返回值是比较两个数的相对顺序的值UTF-16
排序的,对于字母数字 你可以利用ASCII
进行记忆[3, 15, 8, 29, 102, 22] .sort((a,b) => a-b) // [3,8,15,22,29,102]
[3, 15, 8, 29, 102, 22] sort((a,b) => b-a) //[102, 29, 22, 15, 8, 3]
let arr = [3, 15, 8, 29, 102, 22]
arr.sort((a, b) => {
return a - b
})
console.log(arr)
a-b输出从小到大排序,b-a输出从大到小排序。
[3, 15, 8, 29, 102, 22].sort((a,b) => {return a - b;});
[3, 15, 8, 29, 102, 22].sort((a,b)=>b-a)
要是js 出个sortAsc 和 sortDsc 就更易读懂了
[3, 15, 8, 29, 102, 22].sort((a, b) => b - a) // [102, 29, 22, 15, 8, 3]
[3, 15, 8, 29, 102, 22].sort(function(a,b) {
return a-b;
})
输出: [3, 8, 15, 22, 29, 102]