js sort 二维数组排序的用法小结

最近在搞js 排序的问题,由于数据库排序太耗资源,若是能转移到客户端去排序,能大大D减小服务器内存消耗。客户端的话,除了js,就是as了,惋惜我as学得太烂,因此只能选择js来研究研究了。。。通过个人测试,js内置方法sort的效率很是高php

咱们知道在js中默认提供了sort函数,可是这个函数默认是按照数组内容的ascii码升序进行排列的,若是咱们要对二维数组排序要如何作呢?在php中是有multi_sort函数可供调用的,可是在js中彷佛没有这种函数,可是不要紧 ,由于js的sort函数其实也提供了参数能够定义比较函数进行二维数组的排序。html

一、按数值排序
假设有以下数组c++

复制代码代码以下:

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

 

二、按字符串排序
按字符串排序的话呢,咱们能够利用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]); 便可。函数

 

这样排序的问题就实现了,js二维数组排序用到的地方仍是不少的。但愿能帮到些人的忙吧测试

复制代码代码以下:
    function tblSort(s){                      for(r = 0;r < row_len;r++){                     arrs[r]=[]                     for(c=0;c<cel_len;c++){                         arrs[r][c] ={}//二维数组里再建立一个对象;                         arrs[r][c].html = table.rows[r].cells[c].innerHTML//取表格HTML放进一个关联数组里面,用于排序后显示在页面上;                         var text = table.rows[r].cells[c].innerText//取得表格的文字内容用于下面的判断;                         //检测可能出现的内容若是不是正常的数据就变成负数,排在最后面;                         if(text == '-'){                             arrs[r][c].text='-1';                         }else if(text=='从新检测'){                                                         arrs[r][c].text='-2';                         }else if(text=='无百度快照'||text=='无排名数据'){                             arrs[r][c].text='-3'                         }else if(text == ''){                             arrs[r][c].text='-4'                         }else{                             arrs[r][c].text=table.rows[r].cells[c].innerText//取表格文字内容放进一个关联数组里面。用于下面的sort作排序。                         }                     }                 }                //alert(arrs[0][0]['text'])                //reve判断当前是正常排序仍是反序;                    if(reve){                         arrs.sort(function(x,y){                             return parseFloat(y[s]['text']) - parseFloat(x[s]['text'])                                             });                         reve=0                     }else{                         arrs.sort(function(x,y){                             return parseFloat(x[s]['text']) - parseFloat(y[s]['text'])//排序                         })                         reve=1                     }                     //将排好的html内容放入表格里                     for(r = 0;r < row_len;r++){                         for(c=0;c<cel_len;c++){                              table.rows[r].cells[c].innerHTML =arrs[r][c]['html']                         }                     }             }         //表格排序结束
相关文章
相关标签/搜索