排序算法
- 通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。
sort()方法会直接对Array进行修改,它返回的结果仍是当前Array
var a1 = ['B', 'A', 'C'];
var a2 = a1.sort();
a1; // ['A', 'B', 'C']
a2; // ['A', 'B', 'C']
a1 === a2; // true, a1和a2是同一对象
例子
Array的sort()方法默认把所有元素先转换为String再排序 ( 默认排序规则 ),不能直接对数字排序
- sort()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。
- 结果’10’排在了’2’的前面,因为字符’1’比字符’2’的ASCII码小。
- 字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后。
```javascript // 看上去正常的结果: [‘Google’, ‘Apple’, ‘Microsoft’].sort(); // [‘Apple’, ‘Google’, ‘Microsoft’];
// apple排在了最后: [‘Google’, ‘apple’, ‘Microsoft’].sort(); // [‘Google’, ‘Microsoft”, ‘apple’]
// 无法理解的结果: [10, 20, 1, 2].sort(); // [1, 10, 2, 20]
<a name="jayDD"></a>
### 按数字大小排序
```javascript
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
console.log(arr); // [1, 2, 10, 20]
倒序排序
- 倒序排序,我们可以把大的数放前面:
```javascript var arr = [10, 20, 1, 2]; arr.sort(function (x, y) { if (x < y) {
} if (x > y) {return 1;
} return 0; }); // [20, 10, 2, 1]return -1;
```