网站地图    收藏   

主页 > 前端 > javascript >

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

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

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

最简单的二维数组排序

 代码如下 复制代码

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

支持中文排序

比如

 代码如下 复制代码

var arr = [['中', '国'], ['啊', '的'], ['哦', '的']];

arr.sort(function(x, y){

    return x[0].localeCompare(y[0]);

});

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

 

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

 代码如下 复制代码

function listSortBy(arr, field, order){
    var refer = [], result=[], order = order=='asc'?'asc':'desc', index;
    for(i=0; i<arr.length; i++){
        refer[i] = arr[i][field]+':'+i;
    }
    refer.sort();
    if(order=='desc') refer.reverse();
    for(i=0;i<refer.length;i++){
        index = refer[i].split(':')[1];
        result[i] = arr[index];
    }
    return result;
}

测试方法

var a = [
    {name:'hdj', age:28},
    {name:'yim', age:25},
    {name:'hdq', age:26}
];
a = listSortBy(a, 'age', 'desc');
/*
结果:
{name:'hdj', age:28},
{name:'hdq', age:26},
{name:'yim', age:25}
*/

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论