Maxmengt
2016-03-31 15:11
该节描述说sort函数返回值是以-1和1作为分界点判断A,B是否需要交换位置。可是示例代码中的return a - b; 显然是根据0作为分界点。
然后查了w3school发现以下描述:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
http://www.w3school.com.cn/jsref/jsref_sort.asp
所以该节sort函数描述是否有误?
应该以w3c为准
数组内的元素有数组和字母两种情,下面这个例子是当要比较的对象是两种情况的任意一种时的写法:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
function compare(a,b){
//升序
/*if(a>b){
return 1;
}
if(a==b){
return 0;
}
if(a<b){
return -1;
}*/
//降序
if(a<b){
return 1;
}
if(a==b){
return 0;
}
if(a>b){
return -1;
}
}
var myArra1=new Array(10,2,3,4,5,6,7,8,9,1);
var myArra2=["g","d","e","h","q","b","c","a","A","D","F"];
var myArra3=["g","d","DB","e","DA","h","AA","q","b","c","a","AB","D","F"];
document.write(myArra1.sort(compare) + "<br/>");
document.write(myArra2.sort(compare) + "<br/>");
document.write(myArra3.sort(compare) + "<br/>");
</script>
</head>
<body>
</body>
</html>
这句话也很重要:如果此方法没有参数,那就会将数组中的元素尝试转换成字符串,然后比较字符串中每个字符的ASCII码的大小,较小的的字符串在前面。
慕课网的写法是有些问题的,大家看看这里面的解释吧
http://www.softwhy.com/forum.php?mod=viewthread&tid=8360
前面已经说了有参数函数的,若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。若 a 等于 b,则返回 0。若 a 大于 b,则返回一个大于 0 的值。如果你直接对字符进行运算符运算,会返回什么结果? NaN.所以不符合结果。这样排序就没有什么用。
所以说要根据sort函数的返回值进行改写.
[JavaScript] 纯文本查看 复制代码运行代码
console.log(["g","d","e","h","q","b","c","a","A","D","F"].sort(function(a,b){if(a>b){return 1;}if(a==b){return 0;}if(a<b){return -1;}}));
描述不准确
应该是大于0,小于0,和等于0三种情况
如果是字母的话,会按照字母顺序进行排序。
没错 0的话a=b,<=-1说明a<b , >=1说明a>b。
JavaScript进阶篇
468195 学习 · 21891 问题
相似问题