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

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

我们知道js默认提供了sort函数,但是这个函数默认是按照数组内容的ascii码升序排列的。如果要对二维数组进行排序,应该怎么做?

最近在搞js排序,因为数据库排序太消耗资源了。如果能转移到客户端排序,可以大大减少服务器内存消耗。客户端,除了js,都是as。可惜我as太差,只能选择js学习。经过我的测试,js内置方法sort非常高效。

我们知道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前面,然后这是默认的升序比较函数。如果要降序排序,只需修改比较方法,改为返回Y[0]x[0]。这里,我们的X [0]表示我们按照第一列排序。我们也可以在这里按其他列排序。这里的排序会默认修改arr的数组结构,所以排序后的arr是按照第一列升序排列的数组。

2、按字符串排序

按字符串排序呢?我们可以使用js提供的localeCompare方法。localeCompare用于以本地特定的顺序比较两个字符串。localeCompare方法的使用规则是string object . locale compare(target)。如果stringobject小于target,localecompare()返回一个小于0的数字。如果stringObject大于target,则该方法返回一个大于0的数字。如果两个字符串相等,或者根据本地排序规则没有区别,这个方法返回0,比较使用本地规则,也就是说使用操作系统底层的本地字符排序规则对这些字符进行排序。例如,默认情况下,使用大于号仅比较两个字符的unicode数字,这与许多语言不一致。比如复制代码如下:var arr=[中,过],[啊,的],[哦,的]];arr.sort(function(x,y){ return x[0])。locale compare(y[0]);});结果将根据第一列中字符的拼音进行排序。如果包含英文,默认是把英文放在前面。如果是纯英文,就按字母顺序来,小写后大写,这样就可以实现字符串的排序,包括中文和中英文混合。至于降序,方法同上,改为返回y[0]。locale compare(x[0]);去做吧。

这个排序问题实现了,js二维数组排序用的地方还是很多的。希望能帮到一些人。复制代码如下:function TBL sort(s){ for(r=0;r row _ lenr){ arrs[r]=[]for(c=0;ccel _ lenC ){ arrs[r][c]={}//在二维数组中创建另一个对象;Arrs [r] [c]。HTML=table.rows [r]。单元格[c]。innerhtml//取表格html放入一个关联数组,用来排序并显示在页面上;Text=table.rows [r]。单元格[c]。innerText//获取表格的文本内容,用于以下判断;//检测可能的内容。如果不是正常数据,就会变成负数,排在最后;if(text==-){ arrs[r][c]。text=-1 ;} else if(text== re-detection ){ arrs[r][c]。text=-2 ;}else if(text==无百度快照 ||text==无排名数据){arrs [r] [c]。text=-3 } else if(text= ){ arrs[r][c]。text=-4}用于下面的排序来排序。

} }

}//alert(arrs[0][0][ text ])//reve确定当前顺序是正常还是反向;if(reve){ arrs.sort(function(x,y){ return parse float(y[s][ text ])-parse float(x[s][ text ])});reve=0 } else { arrs . sort(function(x,y){ Return parse flow(x[s][ text ])-parse flow(y[s][ text ])//sort })reve=1 }//将排序后的html内容放入r row _ lenr){ for(c=0;ccel _ lenc ){ table.rows[r]。单元格[c]。innerHTML=arrs[r][c][html] }

} }//表排序结束

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