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


Posted in Javascript onJanuary 24, 2014

最近在搞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<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']
                        }
                    }
            }
        //表格排序结束
Javascript 相关文章推荐
JavaScript实现的GBK、UTF8字符串实际长度计算函数
Aug 27 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
Dec 16 Javascript
js实现图片无缝滚动
Dec 23 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
Jan 28 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
jQuery的$.extend 浅拷贝与深拷贝
Mar 08 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
Aug 26 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
如何通过JS实现转码与解码
Feb 21 Javascript
javascript实现计算器功能详解流程
Nov 01 Javascript
js二维数组排序的简单示例代码
Jan 24 #Javascript
js中数组(Array)的排序(sort)注意事项说明
Jan 24 #Javascript
Array 重排序方法和操作方法的简单实例
Jan 24 #Javascript
JS数组去重与取重的示例代码
Jan 24 #Javascript
关于js数组去重的问题小结
Jan 24 #Javascript
js数组去重的常用方法总结
Jan 24 #Javascript
JQuery的$和其它JS发生冲突的快速解决方法
Jan 24 #Javascript
You might like
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
建立文件交换功能的脚本(二)
2006/10/09 PHP
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
function foo的原型与prototype属性解惑
2010/11/19 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
python编程开发之日期操作实例分析
2015/11/13 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python应用文件读取与登录注册功能
2019/09/23 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
淘宝中秋节活动方案
2014/01/31 职场文书
家具促销活动方案
2014/02/16 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技