js 二维数组排序

来源:互联网 发布:epic抢票软件 编辑:程序博客网 时间:2024/05/16 16:56

我们知道在js中默认提供了sort函数,但是这个函数默认是按照数组内容的ascii码升序进行排列的,如果我们要对二维数组排序要如何做呢?在 php中是有multi_sort函数可供调用的,但是在js中似乎没有这种函数,但是没关系 ,因为js的sort函数其实也提供了参数可以定义比较函数进行二维数组的排序。

1、按数值排序假设有如下数组var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];这里如果我们要按每个子数组的第一列来排序要如何做呢,我们可以定义一个比较函数:arr.sort(function(x, y){    return x[0] - y[0];});

这 里的比较函数的作用是什么呢?其实是数组依次将数组元素复制给x,y,比如首先将arr[0]赋给x,arr[1]赋给y,然后用x[0] - y[0],根据返回的值,如果返回的是大于0的数,那么就把数组中x放到y的后面,如果返回的是0则不变,小于0则将x放到y的前面,然后第一个排序好之 后在进行下面两个的排序,直到整个数组排序完成。这是默认升序的比较函数,如果要降序排列则只需修改比较方式,改为 return y[0] - x[0] 即可,这里我们x[0]表示是按第一列进行排序,我们这里也可以按其他列进行排序。这里的排序默认就会修改arr的数组结构,所以排序完arr就是按第一 列升序的数组了。

2、按字符串排序

按字符串排序的话呢,我们可以利用js提供的localeCompare方法,

localeCompare作用:用本地特定的顺序来比较两个字符串。

localeCompare 方法的使用规则是stringObject.localeCompare(target),如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0,器比较使用的是本地的规则,本地规则意思就是使用操作系统底层对这些本地字符排序的规则进行排序,默认情况下比如使用大于号这样的比较只是纯粹比较两 个字符的unicode的数大小,会与很多语言不符。

比如var arr = [['中', '国'], ['啊', '的'], ['哦', '的']];arr.sort(function(x, y){    return x[0].localeCompare(y[0]);});

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

源自:http://apps.hi.baidu.com/share/detail/45789334

0 0
原创粉丝点击