A-A+

javascript二维数组排序(可按指定字段排序)

2016年10月14日 前端设计 暂无评论 阅读 6 views 次

我们知道如果只是一维数组排序在js中默认提供了sort函数,但是这个函数默认是按照数组内容的ascii码升序进行排列的,但是在js中二维数组排序没有现有函数哦,下面我来介绍介绍。

最简单的二维数组排序,代码如下:

  1. <script type="text/javascript">  
  2. var aa =[["a",3],["b",4],["c",2],["d",1]];  
  3. alert(aa.sort(function(x,y){return x[1]-y[1]}))  
  4. </script>  

支持中文排序,比如如下代码:

  1. var arr = [['中', '国'], ['啊', '的'], ['哦', '的']];  
  2.   
  3. arr.sort(function(x, y){  
  4.   
  5.     return x[0].localeCompare(y[0]);  
  6.   
  7. });  

结果就会按第一列中文字的拼音排序,如果含有英文的话,默认是将英文放在前面,如果是纯英文的话,会按字母顺序来,大写排在小写的后面,这样就可以实现字符串的排序了,包括中文和中英混排。至于要降序排列的话,方法与上面相同,改成return y[0].localeCompare(x[0]); 即可。

可以达到我们的效果了,但是如果我想指定一个字段来进行排序呢,其它要不要排序就一个内容的需要排序,下面我自定了一个数组排序函数,代码如下:

  1. function listSortBy(arr, field, order){  
  2.     var refer = [], result=[], order = order=='asc'?'asc':'desc', index;  
  3.     for(i=0; i<arr.length; i++){  
  4.         refer[i] = arr[i][field]+':'+i;  
  5.     }  
  6.     refer.sort();  
  7.     if(order=='desc') refer.reverse();  
  8.     for(i=0;i<refer.length;i++){  
  9.         index = refer[i].split(':')[1];  
  10.         result[i] = arr[index];  
  11.     } //xiariboke.net  
  12.     return result;  
  13. }  

测试方法:

  1. var a = [  
  2.     {name:'hdj', age:28},  
  3.     {name:'yim', age:25},  
  4.     {name:'hdq', age:26}  
  5. ];  
  6. a = listSortBy(a, 'age', 'desc');  
  7. /* 
  8. 结果: 
  9. {name:'hdj', age:28}, 
  10. {name:'hdq', age:26}, 
  11. {name:'yim', age:25} 
  12. */  
标签:

给我留言