JS (JavaScript) 中数组 Array.sort 排序

JavaScript中数组的sort()方法主要用于对数组的元素进行排序

  1. 原理
    arr.sort((m, u) => { ... return (number) }
    sort 的参数接收一个函数 或者 可以不传参
    不传参数的情况,也就是默认排序顺序是根据字符串Unicode码点
    sort内的函数 返回值小于0, m排在u前面; 返回值等于 0, m,u相等顺序不变; 返回值大于 0, m排在u后面
  2. 数值排序
          //升序

          var arr = [1, 2, 3, 11, 12, 4, 1, 3, 10];
          // var newArr = arr.sort((m,u)=>{return u - m});
          // 或者下边这种写法都可以
          var newArr = arr.sort(num);
          console.log(newArr); // [1, 1, 2, 3, 3, 4, 10, 11, 12] 
          function num (m,u){
              return m - u;                
          }


          //降序

          var arr = [1, 2, 3, 11, 12, 4, 1, 3, 10];
          // var newArr = arr.sort((m,u)=>{return u - m});
          // 或者下边这种写法都可以
          var newArr = arr.sort(num);
          console.log(newArr); // [1, 1, 2, 3, 3, 4, 10, 11, 12] 
          function num (m,u){
              return  u- m;                
          }
  1. 字符串排序
        // 对字符串数组执行不区分大小写的字母表排序
   
            // 字符串的数字 或者字母 是同位置的字符的码点相比较 当前位置码点相等 继续下一位置比较 直到得出不同或结束
            // 所以 '120' 和 '1190' '120' 比 '1190' 排后面  
            var arr = ['a', 'Ar', 'c', 'd', 'E', 'Fs', '120', '1190', 'ee']; 
            var newArr = arr.sort(num);
            console.log(newArr); 
            // 输出 ['1190', '120', 'a', 'Ar', 'c', 'd', 'E', 'ee', 'Fs']
            function num (m,u){
                var a = m.toLowerCase();
                var b = u.toLowerCase();
                if (a < b) return -1;  
                if (a > b) return 1;
                return 0;        
            }

  1. 随机排序
 
            // 随机排序
            var arr = [2, 7, 2, 55, 66, 33, 2, 36, 8]; 
            var newArr = arr.sort(num);
            console.log(newArr); 
            // 输出 [7, 33, 36, 55, 8, 66, 2, 2, 2]
            function num (m,u){
               return Math.random() < 0.5 ? 1 : -1;      
            }

  1. 数组元素 是对象的 根据身高排序
            // 身高排序
            var arr = [
                {name:'张三',height:160,heightUnit:'cm'},                
                {name:'王五',height:180,heightUnit:'cm'},
                {name:'李四',height:170,heightUnit:'cm'},
            ]; 
            var newArr = arr.sort(num);
            console.log(newArr);             
            function num (m,u){
               return m.height - u.height     
            }
            
            //也可以这么写
            var arr = [
                {name:'张三',height:160,heightUnit:'cm'},                
                {name:'王五',height:180,heightUnit:'cm'},
                {name:'李6',height:170,heightUnit:'cm'},
                {name:'李7',height:161,heightUnit:'cm'},
                {name:'李8',height:155,heightUnit:'cm'},
                {name:'李9',height:130,heightUnit:'cm'},
                {name:'李4',height:110,heightUnit:'cm'},
            ]; 
            var newArr = arr.sort(compare('height'));
            console.log(newArr);  
            function compare(property){
                return function(m,u){
                    var m = m[property];
                    var u = u[property];
                    return m - u;
                }
            }



posted @ 2022-05-18 11:59  S077星舰  阅读(220)  评论(0编辑  收藏  举报