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

  • 相关阅读:
    软工实践练习一——使用Git进行代码管理心得
    作业1.3——Android平台的开发环境的发展演变
    作业1.2——软件工程的实践项目的自我目标
    SVN冲突解决
    sea.js及三种加载方式的异同
    php中AJAX请求中使用post和get请求的区别
    Vue-起步篇:Vue与React、 Angular的区别
    页面常见布局以及实现方法--flex
    requestAnimationFrame之缓动的应用
    bootstrap中table页面做省市区级联效果(级联库见前面级联编辑)(非select下拉框)
  • 原文地址:https://www.cnblogs.com/xqschool/p/15513767.html
Copyright © 2011-2022 走看看