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);