数组Array的排序sort


    JavaScript中的Array对象有自己的排序方法sort(),对数组中的数据项进行排序,但是有时候排序结果不尽如人意,比如

var arr = [12, 1, 2, 21, 3];
arr.sort();
alert(arr); 

    得到的结果为  1,12,2,21,3


    这是为什么呢?因为JavaScript中的排序默认按照ascii字符代码进行排序,也就是说,数字也是按照它们的字符串形式排序的。

var strArr = ['a', '2', 'a2', '2a', 'b', '3'];
alert(strArr.sort());


    这个得到什么结果呢? 2,2a,3,a,a2,b


    因为 数字的ascii码比字母的小,所以数字排在前面,字母排在后面。


    如果想继续让上面的数组arr按照数字进行排序,怎么处理呢?

    JavaScript给我们提供了一个入口,可以给sort() 方法传递一个参数,即比较函数,来告诉排序算法值与值之间是大于、小于还是等于关系。


     比较函数是有着特定算法的函数。

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


    将比较函数 compare_fn 传递给sort,再进行排序,然后输出

arr.sort(compare_fn);
alert(arr);

    得到 1, 2, 3, 12, 21


JavaScript中Array对象的sort方法返回值的定义为

负值 : 如果所传递的第一个参数比第二个参数小

零   : 两个值相等

正值 : 如果第一个参数比第二个参数大


    上面的比较函数还可以简写为

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

    这个比较的为升序排列


    如果想降序排列,直接改变上面的返回值的符号就可以了,给所有返回均取反。

    对简写的比较函数就是

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

    

    即

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

   

    简单的记法就是:顺序升;逆序降





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值