js排序问题为什么使用了下面的cmpare方法就实现了根据值的大小排序
vararr1=[10,2,4,1,6,22];;functioncompare(vaule1,vaule2){if(vaule1<vaule2){return-1;}e...
var arr1=[10,2,4,1,6,22];
;
function compare(vaule1,vaule2){
if (vaule1<vaule2) {
return -1;
}
else if(vaule1>vaule2){
return 1;
}
else{
return 0;
};
}
arr1.sort(compare);
alert(arr1); 展开
;
function compare(vaule1,vaule2){
if (vaule1<vaule2) {
return -1;
}
else if(vaule1>vaule2){
return 1;
}
else{
return 0;
};
}
arr1.sort(compare);
alert(arr1); 展开
1个回答
展开全部
因为 arr1 是一个数组对象(即Array),而数组对象具有一个排序方法sort(),该方法可以接受一个比较元素次序的排序函数,compare正是这样的一个排序函数。所以可以实现排序。
排序函数要接受两个参数,这两个参数代表数组中的两个元素,排序函数根据这两个元素的次序正确否返回修正值:-1表示次序错了(应该把第二个参数排列在第一个参数之前),0表示次序无所谓(第一个参数在前也行,第二个参数在前面也行),1表示次序正确(第一个参数在前,第二个参数在后)
排序函数要接受两个参数,这两个参数代表数组中的两个元素,排序函数根据这两个元素的次序正确否返回修正值:-1表示次序错了(应该把第二个参数排列在第一个参数之前),0表示次序无所谓(第一个参数在前也行,第二个参数在前面也行),1表示次序正确(第一个参数在前,第二个参数在后)
追问
为什么返回-1或者1就可以判断啊不是太明白
追答
换个方法给你解释一下吧:
设计sort方法的人规定了这个方法可以接受一个排序函数作排序的原则,sort根据这个原则进行排序。sort将多次调用你提供给他的这个排序函数,从而确定数组中哪个元素应该放在前面,哪个元素应该放在后面。排序函数必须接受两个参数(a,b),并对这两个参数进行比较,如果a应该排在b之后则返回一个正数,如果a应该排在b之前则返回一个负数,如果a在前也行b在前也行就返回0。
请看下面的三个例子
// 首先定义三个排序函数
function SmallToBig(v1,v2){ return v1-v2; } // 按从小到大排序
function BigToSmall(v1,v2){ return v2-v1; } // 按从大到小排序
function unitsSmallToBig(v1,v2){ return v1 % 10 - v2 % 10; } // 按个位数从小到大排序
// 接下来定义一个数组对象
var arr1=[10,2,4,1,6,22];
// 然后按照不同的排序函数对其进行排序
arr1.sort(SmallToBig); // 按从小到大排序
alert(arr1);
arr1.sort(BigToSmall); // 按从大到小排序
alert(arr1);
arr1.sort(unitsSmallToBig); // 按个位数从小到大排序
alert(arr1);
你也可以自己写一些排序函数试试,比如按字符串长度排序的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询