js 多维数组排序

咱们知道在数组排序要如何作呢?在php中是有multi_sort函数可供调用的,可是在js的sort函数其实也提供了参数能够定义比较函数进行二维数组的排序。php

一、按数值排序数组

假设有以下数组函数

var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];spa

这里若是咱们要按每一个子数组的第一列来排序要如何作呢,咱们能够定义一个比较函数:操作系统

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

 

二、按字符串排序blog

按字符串排序的话呢,咱们能够利用js提供的localeCompare方法,排序

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

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]); 便可。


3    <!-- var testArray = new Array(); testArray[0]= new Array('e','2','g'); testArray[1]= new Array('b','3','c'); testArray[2]= new Array('a','1','a');   testArray[3]= new Array('d','4','h');   testArray.sort(sortfunction); alert(testArray[0] + "" + testArray[1] + "" + testArray[2] + "" + testArray[3])// 排序方法中有两个参数,表示数组中两个用来排序的元素 // function sortfunction(x,y) {  return x[2].charCodeAt(0) - y[2].charCodeAt(0);//根据二维数组的第三列的第一个字母的ASCII码来降序排序 }     // -->

相关文章
相关标签/搜索