js 二维数组排序sort()函数

一、按数值排序

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就是按第一列升序的数组了。

二、按字符串排序
var arr = [['中','国'], ['啊','的'], ['哦','的']];
arr.sort(function(x, y){
  return x[0].localeCompare(y[0]);
});

localeCompare作用:用本地特定的顺序来比较两个字符串。
localeCompare方法的使用规则是stringObject.localeCompare(target),

如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数,将x放到y的前面,

如果 stringObject 大于 target,则该方法返回大于 0 的数,就把数组中x放到y的后面,

如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0,则不变

其比较使用的是本地的规则,本地规则意思就是使用操作系统底层对这些本地字符排序的规则进行排序,默认情况下比如使用大于号这样的比较只是纯粹比较两个字符的unicode的数大小,会与很多语言不符。

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

posted @ 2016-12-19 16:55  (john_zhang)  阅读(31146)  评论(0编辑  收藏  举报