Jquery的排序方法sort()

HTML:

1 <h3>字符串数组排序前</h3>
2 <div id="show5"></div>
3 <h3>排序后</h3>
4 <div id="show6"></div>

jquery:

var animals = ['dog','cat','tiger','pig','bird'];
$('#show5').html(animals.join('<br/>'));

          
animals = animals.sort();
$('#show6').html(animals.join('<br/>'));

显示结果:

复制代码

字符串数组排序前
dog
cat
tiger
pig
bird
排序后
bird
cat
dog
pig
tiger

复制代码

如果数组换成了数值数组呢?结果会什么怎么样的?

如下:

HTML:

View Code

jquery:

ar nums = ['12','2','5','36','4'];
$('#show7').html(nums.join('<br/>'));
       
nums = nums.sort();
$('#show8').html(nums.join('<br/>'));

显示结果:

复制代码

数值数组排序前
12
2
5
36
4
排序后
12
2
36
4
5

复制代码

很明显,数值数组最后的排序结果不是我们想要的。这是为什么呢?
因为sort()方法排序,是基于ASCII值进行排序的。故它会认为36小于4(因为3的ASCII值小于4的ASCII值)。所以要对排序的sort()方法定义一个比较函数:

jquery:

复制代码

ar nums = ['12','2','5','36','4'];
$('#show7').html(nums.join('<br/>'));

//定义了sort的比较函数
nums = nums.sort(function(a,b){
return a-b;
});

$('#show8').html(nums.join('<br/>'));

复制代码

显示结果:

复制代码

数值数组排序前
12
2
5
36
4
排序后
2
4
5
12
36

复制代码

这才是我想要的结果!

知识点:

1,sort(function(a,b){return a-b;})对传入的一对值进行比较,然后返回的的值为:小于0,大于0,等于0;(大于0交换位置,反之则不)

  * 当小于0时,说明b>a,故b的排序靠后(即不变).

  * 当大于0时,说明a>b,故a的排序靠后.

  * 当等于0时,说明a=b,故不改变排序.

如果对数值数组的值进行降序排序。那么只要把返回的值改为b-a!

个人觉得这个方法包含了排序算法的实现过程

如此类代码:

// 升序
	function upData(idx,ele){  
	 	var domList = $('#listCon p').get();
	    domList.sort(function(a,b){
		    var elOne = $(a).find('span.pxClass').eq(idx).find('span').text();
		    var elTwo = $(b).find('span.pxClass').eq(idx).find('span').text();
		   	if(elOne > elTwo) return 1;
			if(elOne < elTwo) return -1;
			return 0;
	    });
	    $('#listCon').html(domList);
	 }

	 // 降序
	function downData(idx,ele){   
      	var domList = $('#listCon p').get();
	    domList.sort(function(a,b){
		    var elOne = $(a).find('span.pxClass').eq(idx).find('span').text();
		    var elTwo = $(b).find('span.pxClass').eq(idx).find('span').text();
		   	if(elOne > elTwo) return -1;  //降序
   	      	if(elOne < elTwo) return 1;
   	      	return 0;
	    });
	    $('#listCon').html(domList);
	}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值