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

本文介绍了如何使用JavaScript对二维数组进行排序,包括按数值和字符串排序。通过自定义比较函数,可以实现按二维数组中指定列进行升序或降序排序。示例代码详细解释了排序过程和原理,适用于各种包含数字和字符串的二维数组排序场景。
摘要由CSDN通过智能技术生成

最近在搞js 排序的问题,因为数据库排序太耗资源,如果能转移到客户端去排序,能大大D减少服务器内存消耗。客户端的话,除了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的前面,然后第一个排序好之后在进行下面两个的排序,直到整个数组排序完成。这是默认升序的比较函数,如果要降序排列则只需修改比较方式,改为 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]); 即可。

这样排序的问题就实现了,js二维数组排序用到的地方还是很多的。希望能帮到些人的忙吧

function tblSort(s){

for(r = 0;r < row_len;r++){

arrs[r]=[]

for(c=0;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

table.rows[r].cells[c].innerHTML =arrs[r][c]['html']

}

}

}

//表格排序结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值