美文网首页
关于sort()函数排序问题的解决

关于sort()函数排序问题的解决

作者: 虾米不是鱼 | 来源:发表于2020-09-14 11:05 被阅读0次

    sort() 方法用于对数组的元素进行排序。

    问题:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序

    比如:['1','41','4','10']

    排序的结果为:['1','10','4','41']

    他是按照字母顺序进行排序,所以会出现这个问题

    W3C上有这么一句话:

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

    • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

    • 若 a 等于 b,则返回 0。

    • 若 a 大于 b,则返回一个大于 0 的值。

    var arr = ['1','10','4','41'];
    function sortNumber(a,b){
      return a-b
    }
    
    arr.sort(sortnumber);
    
    

    另外还有一种数组对象的进行按字段排序:

    var arr =[
      {name:'lee',age:32},
      {name:'wang',age:30},
      {name:'zhang',age:21},
      {name:'xiao',age:45}
    ]
    /**
    * array[数组]
    * key[string] 通过什么字段进行排序
    * order[number] 1从大到小,-1或者不传 从小到大
    */
    function sortByKey(array,key){
       if(!order || order == -1){
          return array.sort(function(a,b){
            var x=parseInt(a[key]);
            var y=parseInt(b[key]);
            return ((x<y)?-1:((x>y)?1:0));
         });
        }else if(order == 1){
          return array.sort(function(a,b){
            var x=parseInt(a[key]);
            var y=parseInt(b[key]);
            return ((x>y)?-1:((x<y)?1:0));
         });
      }
    }
    
    var newArr = sortByKey(arr,'age')
    
    

    相关文章

      网友评论

          本文标题:关于sort()函数排序问题的解决

          本文链接:https://www.haomeiwen.com/subject/lbreektx.html