[码海拾贝 之JS] JS 之数组排序
来源:互联网 发布:优美句子知乎 编辑:程序博客网 时间:2024/04/30 23:15
简单数组排序
这里的简单数组的定义是,数据的元素是基本的类型整型,字符型,浮点型等,而不是对象类型
排序方法就很简单,使用数组本身的sort 方法。 默认是升序排序。
看例子:
<script> var jsArray = [100,2,4,30]; jsArray.sort(); alert(jsArray); </script>
输出的结果是:
100,2,30,4
和我们预想的结果不一样, 原因是默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序
针对这个方法, 需要特别注意的是:
1.数组调用sort方法后,会影响本身(而非生成新数组)
2.sort()方法默认是按字符来排序的,所以在对数字型数组排序时,不可想当然的以为会按数字大小排序!
自定义排序规则进行排序
针对上面的数字数组排序, 可以使用自定义的排序规则
就是给一个排序函数参数给sort 方法
jsArray.sort(function(a,b){return a>b?1:-1});
以上是按升序排序, 如果要按降序排,很简单:
jsArray.sort(function(a,b){return a<b?1:-1});
对象数组的排序
对象数组的排序, 一般是根据对象中的某个或多个key 对应的值进行排序。
有了上面自定义排序规则排序的介绍,对对象数组的排序就不难了。
还是举例来看:
var jsArray = [{id:1,score:100}, {id:2,score:2}, {id:3,score:4}, {id:4,score:30}]; jsArray.sort(function(a,b){return a["score"]>b["score"]?1:-1}); //test for(var i=0;i<jsArray.length;i++) { alert(jsArray[i].score); }
更多
其实自定义排序规则的这种用法并不鲜见, 在java 中进行sort 也会经常使用到这种方法,而且会经常提到一个词-- 比较器。
其实这个比较函数就是一个比较器. 之前给非开发人员介绍这个的时候, 对于"器"这个词, 他们感觉很膜拜^^. 通俗点的说法还是比较函数......
以下贴一个构造带%数据的比较器的方法:
/************************************************* NAME:jsDataWithPercentComparator* DESCRIPTION:comparate data with Percent like {key1:'1.2%'}* ARGUMENTS:*sortField --> one key of js object*sortType -->desc or asc , default is asc* AUTHOR: oscar999*************************************************/function getJsPercentDataComparator(sortField,sortType){var thisSortType = "asc";if(sortType!=null&&(sortType=="asc"||sortType=="desc")){thisSortType = sortType;}if(thisSortType=="asc"){return function(a,b){var result = 0;if(a[sortField]!=null&&b[sortField]!=null){var astring = a[sortField].replace(/%/,"");var bstring = b[sortField].replace(/%/,"");var afloat = parseFloat(astring);var bfloat = parseFloat(bstring);result = (afloat>bfloat)?1:-1;}return result;};}else if(thisSortType=="desc"){return function(a,b){var result = 0;if(a[sortField]!=null&&b[sortField]!=null){var astring = a[sortField].replace(/%/,"");var bstring = b[sortField].replace(/%/,"");var afloat = parseFloat(astring);var bfloat = parseFloat(bstring);result = (afloat<bfloat)?1:-1;}return result;};}}
调用测试:
var array1 = [{key1:"28.2%"},{key1:"18.2%"},{key1:"38.2%"}];var comparator = getJsPercentDataComparator("key1",sortType);array1 = array1.sort(comparator);
0 0
- [码海拾贝 之JS] JS 之数组排序
- JS之数组中的冒泡排序
- JS之数组元素排序方法sort
- js之数组
- js语法之数组
- JS之数组相关
- js之数组
- Js学习之数组
- JS数据结构之---数组
- js之数组
- JS学习之数组;
- js之数组
- html之js数组
- JS之数组
- js之排序表格
- [码海拾贝 之JS] JS 之删除数组中的元素
- js面试题之数组去重和快速排序
- js算法:分治法-归并排序之合并有序数组
- python实现 从一个数组中找到完全含有另一个数组元素的最短子数组
- 并行输入\输出控制器之我见(PIO)
- 基于中值滤波或双边滤波方式的图像去雾效果的研讨。
- "网络适配器本地连接没有有效ip地址配置"错误的解决办法
- QT下 TableWidget 实现右键菜单栏,以及TableWidget整体美化工作。
- [码海拾贝 之JS] JS 之数组排序
- 医疗行业大数据应用体现在10个角度
- eclipse jetty 插件
- Centos 编译安装ACE
- UEFI的学习
- 传智播客.韩顺平.轻松搞定网页设计(html.css.javascript)
- Objective-C的语法简要说明(c++对照)
- JAVA学习之静态内部类(二)
- [CentOS]如何解决gcc版本冲突?