es5 - array - sort

 

  1 /**
  2  * 描述:该sort()方法对数组中的元素进行排序并返回该数组,默认排序顺序是根据字符串Unicode代码点。
  3  * 语法:arr .sort([compareFunction])
  4  * 参数:
  5  *  指定定义排序顺序的函数。如果省略,则根据每个元素的字符串转换,根据每个字符的Unicode代码点值对数组进行排序。
  6  *  如果compareFunction未提供,undefined则通过将所有非数组元素转换为字符串并按Unicode代码点顺序比较字符串来对所有非数组元素进行排序。
  7  *  例如,“香蕉”出现在“樱桃”之前。在数字排序中,9出现在80之前,但由于数字被转换为字符串,因此“80”以Unicode顺序出现在“9”之前(也就是说,只匹配第一位)。
  8  *  所有  undefined 元素都排序到数组的末尾。
  9  * 返回值:排序的数组。请注意,数组已就地排序,并且不进行复制。
 10  */
 11 
 12 
 13 /**
 14  * 1.默认升序(因此“80”以Unicode顺序出现在“9”之前(也就是说,只匹配第一位))
 15  * 2.可根据可选函数,进行升序和降序
 16  */
 17 
 18 var a = ['A', 'B', '2', '1', '10', '80', '9'];
 19 var b = a.sort(
 20     // function (a, b) {
 21     //     if (a < b) {
 22     //         return -1;
 23     //     }
 24     //     if (a > b) {
 25     //         return 1;
 26     //     }
 27     //     return 0;
 28     // }
 29 
 30     // a-b则为升序
 31     // b-a则为降序
 32     // function hello(a, b) {
 33     //     return b - a;
 34     // }
 35     function (a, b) {
 36         return b - a;
 37     }
 38 );
 39 
 40 console.log(b);
 41 
 42 
 43 
 44 /**
 45  * 可以根据其中一个属性的值对对象进行排序
 46  */
 47 var items = [
 48     { name: 'Edward', value: 21 },
 49     { name: 'Sharpe', value: 37 },
 50     { name: 'And', value: 45 },
 51     { name: 'The', value: -12 },
 52     { name: 'Magnetic', value: 13 },
 53     { name: 'Zeros', value: 37 }
 54 ];
 55 
 56 // sort by value
 57 items.sort(function (a, b) {
 58     return a.value - b.value;
 59 });
 60 
 61 // sort by name
 62 items.sort(function (a, b) {
 63     var nameA = a.name.toUpperCase(); // ignore upper and lowercase
 64     var nameB = b.name.toUpperCase(); // ignore upper and lowercase
 65     if (nameA < nameB) {
 66         return -1;
 67     }
 68     if (nameA > nameB) {
 69         return 1;
 70     }
 71     return 0;
 72 });
 73 
 74 console.log(items)
 75 
 76 
 77 
 78 
 79 /**
 80  * 非ASCIll排序
 81  */
 82 
 83 var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
 84 items.sort(function (a, b) {
 85     return a.localeCompare(b);
 86 });
 87 
 88 
 89 
 90 
 91 /**
 92  *使用map排序
 93  *原因:
 94  *  compareFunction可在阵列内被调用每个元件多次。
 95  *  根据其compareFunction性质,这可能会产生很高的开销。
 96  *  做的工作compareFunction越多,排序的元素就越多,可以考虑使用地图进行排序。
 97  *  我们的想法是遍历数组一次以提取用于排序到临时数组的实际值,对临时数组进行排序,然后遍历临时数组以实现正确的顺序。
 98  * 
 99  */
100 
101 var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
102 var mapped = list.map(function (el, i) {
103     return { index: i, value: el.toLowerCase() };
104 })
105 
106 mapped.sort(function (a, b) {
107     if (a.value > b.value) {
108         return true;
109     }
110     if (a.value < b.value) {
111         return false;
112     }
113     return;
114 });
115 
116 var result = mapped.map(function (el) {
117     return list[el.index];
118 });
119 
120 console.log(result);

 

posted @ 2018-09-21 14:07  Sunsin  阅读(1358)  评论(0编辑  收藏  举报