[码海拾贝 之JS] JS 之数组排序
简单数组排序
这里的简单数组的定义是,数据的元素是主要的类型整型,字符型,浮点型等,而不是对象类型
排序方法就非常easy,使用数组本身的sort 方法。 默认是升序排序。
看样例:
  <script>
     var jsArray = [100,2,4,30];
     jsArray.sort();
     alert(jsArray);
  </script>输出的结果是:
100,2。30,4
和我们预想的结果不一样, 原因是默认情况下sort方法是按ascii字母顺序排序的,而非我们觉得是按数字大小排序
针对这种方法, 须要特别注意的是:
1.数组调用sort方法后,会影响本身(而非生成新数组)
2.sort()方法默认是按字符来排序的,所以在对数字型数组排序时。不可想当然的以为会按数字大小排序。
自己定义排序规则进行排序
针对上面的数字数组排序。 能够使用自己定义的排序规则
就是给一个排序函数參数给sort 方法
jsArray.sort(function(a,b){return a>b?1:-1});
以上是按升序排序, 假设要按降序排,非常easy:
jsArray.sort(function(a,b){return a<b?1:-1});对象数组的排序
对象数组的排序, 通常是依据对象中的某个或多个key 相应的值进行排序。
有了上面自己定义排序规则排序的介绍,对对象数组的排序就不难了。
还是举例来看:
    var  jsArray = [{id:1,score:100},
                {id:2,score:2},
                {id:3,score:4},
                {id:4,score:30}];
     jsArray.sort(function(a,b){return a["score"]>b["score"]?1:-1});        
     //test   
     for(var i=0;i<jsArray.length;i++)
     {
        alert(jsArray[i].score);
     }  
很多其它
事实上自己定义排序规则的这样的使用方法并不鲜见, 在java 中进行sort 也会常常使用到这样的方法,并且会常常提到一个词-- 比較器。
事实上这个比較函数就是一个比較器. 之前给非开发者介绍这个的时候, 对于"器"这个词, 他们感觉非常膜拜^^. 通俗点的说法还是比較函数......
下面贴一个构造带%数据的比較器的方法:
/************************************************
* NAME:			jsDataWithPercentComparator
* DESCRIPTION:	comparate data with Percent like {key1:'1.2%'}
* ARGUMENTS:	
*		sortField  --> one key of js object
*		sortType  -->desc or asc , default is asc
* AUTHOR: 		oscar999
*************************************************/
function getJsPercentDataComparator(sortField,sortType)
{
	var thisSortType = "asc";
	if(sortType!=null&&(sortType=="asc"||sortType=="desc"))
	{
		thisSortType = sortType;
	}
	if(thisSortType=="asc")
	{
		return function(a,b){
			var result = 0;
			if(a[sortField]!=null&&b[sortField]!=null)
			{
				var astring = a[sortField].replace(/%/,"");
				var bstring = b[sortField].replace(/%/,"");
				var afloat = parseFloat(astring);
				var bfloat = parseFloat(bstring);
				result = (afloat>bfloat)?1:-1;
			}
			return result;
		};
	}else if(thisSortType=="desc")
	{
		return function(a,b){
			var result = 0;
			if(a[sortField]!=null&&b[sortField]!=null)
			{
				var astring = a[sortField].replace(/%/,"");
				var bstring = b[sortField].replace(/%/,"");
				var afloat = parseFloat(astring);
				var bfloat = parseFloat(bstring);
				result = (afloat<bfloat)?1:-1;
			}	
			return result;
		};
	}	
}
调用測试:
	var array1  = [{key1:"28.2%"},{key1:"18.2%"},{key1:"38.2%"}];
	var comparator = getJsPercentDataComparator("key1",sortType);
	array1 = array1.sort(comparator); 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号