首页 > 编程语言 > 详细

数组Array的排序sort

时间:2015-04-09 23:48:58      阅读:312      评论:0      收藏:0      [点我收藏+]


    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;
}

   

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





数组Array的排序sort

原文:http://blog.csdn.net/magi1201/article/details/44965765

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!