Array.prototype.sort()和Array.prototype.reverse()
Array.prototype.sort()
sort()对数组元素进行排序然后返回数组,不一定是稳定的。默认排序顺序是根据字符串Unicode码点。
还可以传入一个排序算法的函数,用自定义的方式排序。
此方法会改变数组自身。
var numbers = [4, 2, 5, 1, 3]; numbers.sort(function(a, b) { return a - b; }); console.log(numbers); 也可以写成: var numbers = [4, 2, 5, 1, 3]; numbers.sort((a, b) => a - b); console.log(numbers); // [1, 2, 3, 4, 5]
因为默认排序顺序是根据字符串unicode,所以如果不使用排序函数去对一个数字的数组排序,那么首先会把数字转换成字符串然后再排序,这样结果就不准确了,所以如果要对数字数组排序必须使用排序函数。
使用映射改善排序
compareFunction 可能需要对元素做多次映射以实现排序,尤其当 compareFunction 较为复杂,且元素较多的时候,某些 compareFunction 可能会导致很高的负载。使用 map 辅助排序将会是一个好主意。基本思想是首先将数组中的每个元素比较的实际值取出来,排序后再将数组恢复。
// 需要被排序的数组 var list = ['Delta', 'alpha', 'CHARLIE', 'bravo']; // 对需要排序的数字和位置的临时存储 var mapped = list.map(function(el, i) { return { index: i, value: el.toLowerCase() }; }) // 按照多个值排序数组 mapped.sort(function(a, b) { return +(a.value > b.value) || +(a.value === b.value) - 1; //如果+(a.value > b.value)为真,||后面的就不执行了 }); // 根据索引得到排序的结果 var result = mapped.map(function(el){ return list[el.index]; });
Array.prototype.reverse()
reverse()方法将数组中元素的位置颠倒。
此方法会改变数组自身。
var myArray = ['one', 'two', 'three']; myArray.reverse(); console.log(myArray) // ['three', 'two', 'one']
自己实现简单的reverse():
Array.prototype.reverse = function () { for (var i = 0, temp; i < this.length / 2; i++) { temp = this[i]; this[i] = this[this.length - 1 -i]; this[this.length - 1 - i] = temp } return this; }

浙公网安备 33010602011771号