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()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。

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

    sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点。
    语法:arrayObject.sort(sortby);参数sortby可选。规定排序顺序。必须是函数。
    注:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

    如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
    若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    若 a 等于 b,则返回 0。
    若 a 大于 b,则返回一个大于 0 的值。

    var arr = [10, 20, 1, 2];
    arr.sort(function (x, y) {
        if (x < y) {
            return -1;
        }
        if (x > y) {
            return 1;
        }
        return 0;
    });
    //
    arr.sort(function(a,b){
    return a-b;//升序
    return b-a;//降序
    }) 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是同一对象

    例如:学生根据年龄大小进行排序

    var list=[
          {
             name:"hq",
             age:24
          },
          {
              name:"gq",
              age:21
          },
          {
              name:"xm",
              age:25
          }
        ]
        function compare(property){
            return function(a,b){
                var val1=a[property];
                var val2=b[property];
                return val1-val2;
            }
        }
        console.log(list.sort(compare("age")))
        console.log(list.sort(function(a,b){
              var val1=a["age"];
              var val2=b["age"];
              return val1-val2;
        }));
        console.log(list);

    来源:https://www.cnblogs.com/yourself/p/8709459.html

    参考:https://www.cnblogs.com/moqiutao/p/6382097.html

  • 相关阅读:
    气象数据集数据和相关源码
    农产品质量追溯系统/质量安全追溯系统
    Nutch2.x 演示抓取第一个网站
    Nutch的配置以及动态网站的抓取
    leach-matlab
    leach协议matlab仿真代码
    无线传感器网络数据融合技术
    无线传感器网络数据融合概述
    No pressure, no diamonds.
    Hibernate缓存应用的积累与总结
  • 原文地址:https://www.cnblogs.com/xqschool/p/15513767.html
Copyright © 2011-2022 走看看