转载:http://www.cnblogs.com/ljchow/archive/2010/06/30/1768683.html

我们知道,数组的sort方法可以对数组元素进行排序,默认是按ASCII字母表顺序排序。如果要根据其他的顺序排序就需要为sort方法提供一个比较函数作为参数。这里讲的就是如何写这个比较函数。

  譬如:

  var a=[1,5,3,7];

  a.sort(function(a, b) {

    return b-a

  });//从大到小排列

  那如果复杂点的顺序应该如何写这个比较函数呢。

  对于比较函数function f(a,b){...} ,若返回正数,则说明a和b需要交换,否则不交换。所以我们可以通通根据下面的格式去写比较函数:  

1
2
3
4
5
6
7
function f(a, b) {
    if (...) {
        return 1;
 
    }
    return -1;
}

  然后,我们要做的就是写出if里面的条件,这个条件就是返回a、b需要交换的条件。譬如:对var a=["a","A","B","b"];进行不分大小写并从大到小排序,仅当a.toString().toLowerCase() < b.toString().toLowerCase()时,交换a、b,所以用此填充if条件即可。比较函数就是:

  function f(a, b) {
            if (a.toString().toLowerCase() < b.toString().toLowerCase()) {
                return 1;

}
            return -1;
        }

  再譬如:要使数组的元素按先奇数后偶数的顺序排列,则若需a、b交换,仅当满足a是偶数且b是奇数条件即可,再按从小到大排序,仅当满足a、b均是奇数或偶数且a>b时即可。如下:

<script type="text/javascript">
var a = [1, 7, 3, 9, 5, 6, 2, 8, 4];
function f(a, b) {
if (0 == a % 2 && 1 == b % 2) {
return 1;
}
if ((1 == a % 2 && 1 == b % 2 || 0 == a % 2 && 0 == b % 2) && a > b) {
return 1;
}
return -1;
}
alert(a.sort(f));
</script>

JS数组sort比较函数的更多相关文章

  1. js数组sort方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. js数组sort排序方法的算法

    说明一下,ECMAScript没有定义使用哪种排序算法,各个浏览器的实现方式会有不同.火狐中使用的是归并排序,下面是Chrome的sort排序算法的实现. sort方法源码 DEFINE_METHOD ...

  3. JS数组Sort方法的使用

    想用sort方法对数组排下序,代码如下: var nums = "12 645 6 85 81 0 9 365 4 752".split(" ").map(fu ...

  4. js数组sort方法详解

    在处理数组的时候,我们有时候需要对数组进行排序,排序的方法有很多种,但是最好最快的就是利用sort方法进行快速的排序. 我们来看一个例子: var arr1 = [6, 3, 4, 1, 2, 5, ...

  5. js数组sort()排序的问题

    最近跟自以为很了解的数组干上了,就像许多我们认知的东西一样,总以为自己很了解的东西,其实并不了解. var a=[12,4,1,43,5,3,52];  alert(a);   //源:12,4,1, ...

  6. js 数组sort, 多条件排序。

    Array.sort(); sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序. 一般用法:(数组元素从小大进行排序) var a = [9, 6, 5, 7, 11, 5 ...

  7. js运用sort对json 数组进行排序

    Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列.sort() 方法可以接受一个 方法为参数. sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组 ...

  8. js数组与字符串处理 slice、splice、substring、substr、push、pop、shift、reverse、sort、join、split

    数组 方法 1.在数组末尾添加.删除元素 push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度.改变原数组 pop()方法则从数组末尾移除最后一个元素,减少数组的 ...

  9. JS数组的sort排序

    数组sort方法排序var aa=[6,2,1,5]//默认是从小到大排序aa.sort()[1, 2, 5, 6] //下面也是从小到大排序aa.sort(function(a,b){return ...

随机推荐

  1. MSSQL数据表生成模型

    MSSQL数据表生成模型 http://pan.baidu.com/s/1mhBAapy

  2. Kettle 使用入门

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定. 本文介绍一个入门例子:使用Kettle从动态指定的文件名对应的文本文件里抽取 ...

  3. TCP BBR - 一键开启脚本

    这是秋水逸冰提供的TCP BBR一键开启脚本,脚本详细说明地址: https://teddysun.com/489.html 按照说明操作就可以了,注意问题:这个脚本获取有的时候可能有问题,如果提示脚 ...

  4. 835. Image Overlap

    Two images A and B are given, represented as binary, square matrices of the same size.  (A binary ma ...

  5. 688. Knight Probability in Chessboard

    On an NxN chessboard, a knight starts at the r-th row and c-th column and attempts to make exactly K ...

  6. click 版本升级7.0踩过的坑

    click 版本升级7.0踩过哪些坑? click 版本6.7升级至7.0以上,包名由 click 变更为 Click click 的 Options 和 Parameters 规则变更为如下: Fo ...

  7. 利用tensorflow训练简单的生成对抗网络GAN

    对抗网络是14年Goodfellow Ian在论文Generative Adversarial Nets中提出来的. 原理方面,对抗网络可以简单归纳为一个生成器(generator)和一个判断器(di ...

  8. 十分钟用 Node 命令行工具打造 react-cli 脚手架

    如果你有以下想法: 每次新开项目需要copy一堆文件/文件夹,太烦!想要快速建立工程 用了vue-cli.react-app,羡慕!想要自己做一个 你只需花十分钟时间,做一个Node命令行工具,打造属 ...

  9. jsp页面,jstl标签中的数据在<%%>java中使用

    可参考jsp的API隐式对象.. 这部分数据其实被保存在page域中,但jsp中如果使用java代码需要在特定的标签中<%%>,在这个标签中可使用的只有pageContext对象,所以可以 ...

  10. ReentrantReadWriteLock源码分析(一)

    此处源码分析,主要是基于读锁,非公平机制,JDK1.8. 问题: 1.ReentrantReadWriteLock是如何创建读锁与写锁? 2.读锁与写锁的区别是什么? 3.锁的重入次数与获取锁的线程数 ...