[码海拾贝 之JS] JS 之数组排序
简单数组排序
这里的简单数组的定义是,数据的元素是基本的类型整型,字符型,浮点型等,而不是对象类型
排序方法就很简单,使用数组本身的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);
[码海拾贝 之JS] JS 之数组排序相关推荐
- [码海拾贝 之JS] JS 之删除数组中的元素
前言 在Java 中要从一个list 中删除一个元素, 直接使用 remove 方法就可以了. 在js 中的array 并没有 remove 方法, 但是在js 中array 有splice 方法可以 ...
- [码海拾贝 之Perl]获取日期以及日期的加减
前言 在Perl 中, 不安装其他模组的状况下, 可以使用 localtime 来获取当地日期和时间. 在标量上下文中, 返回的是字符串格式. my $localtime = localtime(); ...
- [码海拾贝 之TC] 使用View 定义动态的Class
前言 在TC 中, Persistent Class 和 Table 是对应的关系. 定义一个Persistent的Class , updatedb 的时候就会产生对应的table. 在TC 的开发环 ...
- [码海拾贝 之TC] 呼叫外部应用程序或脚本
前言 在Teamcenter Enterprise 的服务端开发中, 如何调用到外部的程序或是脚本. 一般, 呼叫外部的程序或脚本 在Java 中, 可以用这样的方式 Process child = ...
- [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
前言 检索一个字符串是否存在于一个数组中, 最基本的想法应该就是对数组进行循环, 逐个判断数组的每个元素值和给定的值是否相等. (在Java语言还可以把数组转成 List , 在 list 中直接有 ...
- C#,码海拾贝(05)——拉格朗日(Lagrange)三点式曲线插值算法之C#源程序
一.约瑟夫·拉格朗日 约瑟夫·拉格朗日(Joseph-Louis Lagrange,1736~1813)全名为约瑟夫·路易斯·拉格朗日,法国著名数学家.物理学家.1736年1月25日生于意大利都灵,1 ...
- C#,码海拾贝(24)——求解“复系数方程组”的“全选主元高斯-约当消去法”之C#源代码
using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations ...
- C#,码海拾贝(11)——拉格朗日(Lagrange)三点式曲面插值(Surface Interpolation)算法C#源程序
本文开始是曲面插值(Surface Interpolation,也称作:二维插值,二元插值). 数值计算三点式 数值计算三点式是一种常见的数值计算方法,它是通过对已知函数在某个点及其左右两个点处的函数 ...
- C#,码海拾贝(03)——积分(Integral Algorithm)算法类C#源程序
一.引言 1.1 图书简介 <C#数值计算--算法编程>是2007年1月1日电子工业出版社出版的图书,由周长发编写. ISBN:9787121032035 本书囊括了近90个实用经典算法, ...
最新文章
- 【Apollo源码分析】系列的第三部分【prediction】_slamcode的博客 -CSDN博客
- 十二. 一步步破解JEB 2.0demo版二
- 从WildFly 9(子系统)中运行OkHttpClient
- kafka监听topic消费_分布式专题|最近一直死磕kafka设计原理,都肝吐了
- jeesite如何已生成数据的数据源_如何在postman中自动生成接口请求数据,这个功能你需要知道,可结合浏览器和两大抓包工具使用...
- 2018.9.18opencv3.4.1 + vs 2017 community +win 10 x64+cmake 3.11.3终终终章!
- 数据可视化(一) 线条曲线
- 圣经 英文有声 android,英文有声+Epub Foundation Series 7部 Isaac Asimov - Audiobook
- 五十、Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL
- Clojure 1.8提升了性能和开发体验
- 让你浏览器飞起来的电脑插件合集
- 水印相机定位不准确怎么办_水印相机怎么定位位置
- day 26 学习Linux-01天
- 第三章作业题3--队列
- 接口测试是什么?为什么要做接口测试?
- (详解)钉钉接口,PC端微应用,免登录及获取当前用户信息
- Apache Kylin 之 初介绍
- 风影ASP.NET基础教学 10 DetilsView
- Platform机制
- Windows 10 操作系统 System Interrupt 系统中断 CPU 占用率高的原因和解决方法