js数组排序相关

关于数组排序的方法sort

  1 // 首先创建三种不同类型的数组,eg:
  2 const numArr = [1, 30, 4, 21, 100000];
  3 const strArr = [‘March‘, ‘Jan‘, ‘Feb‘, ‘Dec‘];
  4 const objArr = [
  5     { name: ‘Edward‘, value: 21 },
  6     { name: ‘Sharpe‘, value: 37 },
  7     { name: ‘And‘, value: 45 },
  8     { name: ‘The‘, value: -12 },
  9     { name: ‘Magnetic‘ },
 10     { name: ‘Zeros‘, value: 37 }
 11   ];
 12 /**
 13  * 关于数组排序sort方法:
 14  * Array.prototype.sort()
 15  * 1.特性:
 16  * 参数为比较函数compareFunction,如果省略这个函数,
 17  * 则所有元素都按照转换为字符串后各个字符的Unicode位点进行排序,
 18  * 且比较方式是从字符串的第一个下标开始依次比较Unicode位点大小。
 19  * 2.关于compareFunction函数:
 20  * 有两个参数,分别是前后两个比较元素,eg:compareFunction(a,b) {}
 21  * compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
 22  * 3. 返回值为排序后的数组,注意排序是修改的原数组的顺序,并不是复制数组;
 23  * sort方法的使用详情如下:
 24  */
 25 
 26 // 1.不加参数:
 27 strArr.sort(); 
 28 // 输出: ["Dec", "Feb", "Jan", "March"]
 29 numArr.sort(); 
 30 // 输出: [1, 100000, 21, 30, 4] 
 31 // 因为未指明compareFunction,所以元素转换为字符串进行了字符的Unicode位点大小的比较
 32 
 33 // 2. 添加比较函数参数:
 34 // 2.1 仅仅适用于数字的比较函数
 35 numArr.sort((a,b) => a - b); // 升序
 36 // 输出:[1, 4, 21, 30, 100000]
 37 numArr.sort((a,b) => b - a); // 降序
 38 // 输出:[100000, 30, 21, 4, 1]
 39 
 40 // 2.2 适用于number[]、string[]类型的排序比较回调函数
 41 // 升序配置
 42 const compareBaseFnUp = (a, b) => {
 43     // 升序配置满足以下3条:
 44     // 1. a小于b返回-1;
 45     // 2. a大于b返回1;
 46     // 3. a等于b返回0, ab相对位置不变
 47     if (a < b) {
 48         return -1;
 49     } else if (a > b) {
 50         return 1;
 51     } else {
 52         return 0;
 53     }
 54 }
 55 // 降序配置
 56 const compareBaseFnDown = (a, b) => {
 57     // 降序配置满足以下3条:
 58     // 1. a小于b返回1;
 59     // 2. a大于b返回-1;
 60     // 3. a等于b返回0, ab相对位置不变
 61     if (a < b) {
 62         return 1;
 63     } else if (a > b) {
 64         return -1;
 65     } else {
 66         return 0;
 67     }
 68 }
 69 // number[]类型数组排序,升序
 70 numArr.sort(compareBaseFnUp); // 输出:[1, 4, 21, 30, 100000]
 71 
 72 // string[]类型数组排序,升序
 73 strArr.sort(compareBaseFnUp); // 输出:["Dec", "Feb", "Jan", "March"]
 74 
 75 // number[]类型数组排序,降序
 76 numArr.sort(compareBaseFnDown); // 输出:[100000, 30, 21, 4, 1]
 77 
 78 // string[]类型数组排序,降序
 79 strArr.sort(compareBaseFnDown); // 输出:["March", "Jan", "Feb", "Dec"]
 80 
 81 // 2.3 适用于object[]类型的排序比较回调函数,设置为升序,降序同理
 82 const compareObjFn = (key) => (obj1, obj2) => {
 83     // 内部同2.2 适用于number[]、string[]类型的排序比较回调函数
 84     if (obj1[key] < obj2[key]) {
 85         return -1;
 86     } else if (obj1[key] > obj2[key]) {
 87         return 1;
 88     } else {
 89         return 0;
 90     }
 91 }
 92 // 根据name属性来比较
 93 objArr.sort(compareObjFn(‘name‘));
 94 // 输出:
 95 // [
 96 //  {name: "And", value: 45},
 97 //  {name: "Edward", value: 21},
 98 //  {name: "Magnetic"},
 99 //  {name: "Sharpe", value: 37},
100 //  {name: "The", value: -12},
101 //  {name: "Zeros", value: 37}
102 // ]
103 
104 // 根据value属性来比较
105 objArr.sort(compareObjFn(‘value‘));
106 // 输出:
107 // [
108 //  {name: "The", value: -12},
109 //  {name: "Edward", value: 21},
110 //  {name: "Sharpe", value: 37},
111 //  {name: "And", value: 45},
112 // // 这里出现了特殊情况,
113 // // 使得compareFunction(a, b)出现了不同的输入,所以导致了排序结果的不确定性;
114 //  {name: "Magnetic"},
115 //  {name: "Zeros", value: 37},
116 // ]

loading。。。

js数组排序相关

上一篇:【python】字符串编码问题


下一篇:HMJAVA数据结构与算法6【树基础、二叉树】