简单数组排序

这里的简单数组的定义是,数据的元素是基本的类型整型,字符型,浮点型等,而不是对象类型

排序方法就很简单,使用数组本身的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 之数组排序相关推荐

  1. [码海拾贝 之JS] JS 之删除数组中的元素

    前言 在Java 中要从一个list 中删除一个元素, 直接使用 remove 方法就可以了. 在js 中的array 并没有 remove 方法, 但是在js 中array 有splice 方法可以 ...

  2. [码海拾贝 之Perl]获取日期以及日期的加减

    前言 在Perl 中, 不安装其他模组的状况下, 可以使用 localtime 来获取当地日期和时间. 在标量上下文中, 返回的是字符串格式. my $localtime = localtime(); ...

  3. [码海拾贝 之TC] 使用View 定义动态的Class

    前言 在TC 中, Persistent Class 和 Table 是对应的关系. 定义一个Persistent的Class , updatedb 的时候就会产生对应的table. 在TC 的开发环 ...

  4. [码海拾贝 之TC] 呼叫外部应用程序或脚本

    前言 在Teamcenter Enterprise 的服务端开发中, 如何调用到外部的程序或是脚本. 一般, 呼叫外部的程序或脚本 在Java 中, 可以用这样的方式 Process child = ...

  5. [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在

    前言 检索一个字符串是否存在于一个数组中, 最基本的想法应该就是对数组进行循环, 逐个判断数组的每个元素值和给定的值是否相等. (在Java语言还可以把数组转成 List , 在 list 中直接有 ...

  6. C#,码海拾贝(05)——拉格朗日(Lagrange)三点式曲线插值算法之C#源程序

    一.约瑟夫·拉格朗日 约瑟夫·拉格朗日(Joseph-Louis Lagrange,1736~1813)全名为约瑟夫·路易斯·拉格朗日,法国著名数学家.物理学家.1736年1月25日生于意大利都灵,1 ...

  7. C#,码海拾贝(24)——求解“复系数方程组”的“全选主元高斯-约当消去法”之C#源代码

    using System; namespace Zhou.CSharp.Algorithm {     /// <summary>     /// 求解线性方程组的类 LEquations ...

  8. C#,码海拾贝(11)——拉格朗日(Lagrange)三点式曲面插值(Surface Interpolation)算法C#源程序

    本文开始是曲面插值(Surface Interpolation,也称作:二维插值,二元插值). 数值计算三点式 数值计算三点式是一种常见的数值计算方法,它是通过对已知函数在某个点及其左右两个点处的函数 ...

  9. C#,码海拾贝(03)——积分(Integral Algorithm)算法类C#源程序

    一.引言 1.1 图书简介 <C#数值计算--算法编程>是2007年1月1日电子工业出版社出版的图书,由周长发编写. ISBN:9787121032035 本书囊括了近90个实用经典算法, ...

最新文章

  1. 【Apollo源码分析】系列的第三部分【prediction】_slamcode的博客 -CSDN博客
  2. 十二. 一步步破解JEB 2.0demo版二
  3. 从WildFly 9(子系统)中运行OkHttpClient
  4. kafka监听topic消费_分布式专题|最近一直死磕kafka设计原理,都肝吐了
  5. jeesite如何已生成数据的数据源_如何在postman中自动生成接口请求数据,这个功能你需要知道,可结合浏览器和两大抓包工具使用...
  6. 2018.9.18opencv3.4.1 + vs 2017 community +win 10 x64+cmake 3.11.3终终终章!
  7. 数据可视化(一) 线条曲线
  8. 圣经 英文有声 android,英文有声+Epub Foundation Series 7部 Isaac Asimov - Audiobook
  9. 五十、Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL
  10. Clojure 1.8提升了性能和开发体验
  11. 让你浏览器飞起来的电脑插件合集
  12. 水印相机定位不准确怎么办_水印相机怎么定位位置
  13. day 26 学习Linux-01天
  14. 第三章作业题3--队列
  15. 接口测试是什么?为什么要做接口测试?
  16. (详解)钉钉接口,PC端微应用,免登录及获取当前用户信息
  17. Apache Kylin 之 初介绍
  18. 风影ASP.NET基础教学 10 DetilsView
  19. Platform机制
  20. Windows 10 操作系统 System Interrupt 系统中断 CPU 占用率高的原因和解决方法

热门文章

  1. keepalived + LVS实现高可用负载均衡集群
  2. POJ1050-To the Max
  3. IOS文件管理-NSFileMangager-NSdata
  4. 多线程扫描网络计算机
  5. EXPRESS项目PM2启动NODE_ENV传参数不生效问题解决方法
  6. 12.解决SUSE Linux无法使用SSH登录的问题
  7. Spring-全局异常拦截
  8. YYDS!对比学习还能这么用?
  9. 【数据结构与算法基础】树的应用
  10. xp彻底删除mysql_xp彻底清除mysql数据库