zoukankan      html  css  js  c++  java
  • js的Array的sort()排序方法

    摘自廖雪峰的官方网站

    Arraysort()方法默认把所有元素先转换为String再排序,字符串是根据ASCII码进行排序,所以sort()方法排序结果画风可能是这样的

    // 看上去正常的结果:
    ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];
    
    // apple排在了最后:
    ['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']
    
    // 无法理解的结果:
    [10, 20, 1, 2].sort(); // [1, 10, 2, 20]

    第二个排序把apple排在了最后,是因为字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后。

    第三个排序是因为sort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,而字符'1'比字符'2'的ASCII码小。

    幸运的是,sort()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。

    要按数字大小排序,我们可以这么写:

    var arr = [10, 20, 1, 2];
    arr.sort(function (x, y) {
        if (x < y) {
            return -1;
        }
        if (x > y) {
            return 1;
        }
        return 0;
    });
    console.log(arr); // [1, 2, 10, 20]

    最后友情提示,sort()方法会直接对Array进行修改,它返回的结果仍是当前Array

    var a1 = ['B', 'A', 'C'];
    var a2 = a1.sort();
    a1; // ['A', 'B', 'C']
    a2; // ['A', 'B', 'C']
    a1 === a2; // true, a1和a2是同一对象
  • 相关阅读:
    ASP.NET MVC 学习之路由(URL Routing)
    Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
    linux解压zip文件
    /bin/sh^M:解释器错误:没有那个文件或目录
    mysql查看连接情况
    linux编译qt
    没有可用的软件包 xxx,但是它被其它的软件包引用了
    什么是人月
    qt linux 打包
    linux里安装使用svn
  • 原文地址:https://www.cnblogs.com/yourself/p/8709459.html
Copyright © 2011-2022 走看看