sort()方法
语法:arr.sort(compareFunction)
compareFunction可选,用来指定按某种顺序进行排列的函数。
sort()方法会把数组中元素转换为字符(调用toString()方法),根据每个字符Unicode位点进行排序。
1 2 3
| var values = [0, 1, 5, 10, 15]; values.sort(); alert(values);
|
比较函数接受两个参数,若第一个参数小于第二个参数则返回负数;若第一个参数等于第二个参数则返回整数;若第一个参数大于第二个参数则返回整数。一个比较函数的例子:
1 2 3 4 5 6 7 8
| compareFunction(a, b) { if (a < b) return -1; else if (a > b) return 1; else return 0; } values.sort(compareFunction); alert(values);
|
当 compareFunction 较为复杂,使用 map 辅助排序将会是一个好主意。基本思想是首先将数组中的每个元素比较的实际值取出来,排序后再将数组恢复。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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; }); var result = mapped.map(function(el){ return list[el.index]; });
|
最后要说的是JavaScript数组中使用的排序算法是in-place类型的,为了节省内存,是不稳定的,因为基于非相邻元素比较的排序算法都是不稳定的。