js:数组重排序问题:如何使用sort()方法按数值的大小进行升序或降序排列

js数组重排序问题

一、直接用sort()排序的缺陷

如果单独使用sort()方法对数组进行排序,sort()方法在默认情况下按字符串从小到大排列。

var values=[1,10,2,15,3];
     values.sort();
     alert(values);`//1,10,15,2,3

这种排序方式不能真正按照数组数值的大小来进行排列,因此,可以在sort()中传入一个比较函数指定哪个值位于哪个值的前面。例如:

var  values=[1,10,2,15,3];
values.sort(compare);
alert(values);//1,2,3,10,15

二、关于比较函数的说明

牢记两个原则:
传入的两个参数value1,value2
如果第一个参数应该位于第二个之前则返回一个负数。
如果第一个参数应该位于第二个之后则返回一个正数。
升序:
方法一

function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}

方法二

function compare(value1,value2){
return value1-value2;
}

降序:
方法一

function compare(value1,value2){
if(value1>value2){
return -1;
}else if(value1<value2){
return 1;
}else{
return 0;
}
}

方法二:

function comparevalue1,value2){
return value2-value1;
}

tips(记忆小技巧):
使用方法一的思考顺序:如果要返回一个负数,当前value1和value2的前后顺序不变,升序条件是1<2,降序条件是1>2;如果要返回一个正数,使得当前value1和value2的前后顺序交换,则不满足升序和降序的条件,1>2或1<2。
使用方法二时的思考顺序是:想要保持当前的顺序,就要返回一个负数,升序就是1<2,所以return1-2,正好为负数。

猜你喜欢

转载自blog.csdn.net/yangyuqingabc/article/details/77986205
今日推荐