# 描述

对数组的元素进行排序(修改原数组),并返回数组,默认排序顺序是根据字符串 Unicode 码点。

为了实现排序,sort() 方法会调用每个数组项的 toString() 方法,然后比较得到的字符串,以确定如何排序。

另外,sort() 可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。

# 参数

参数 描述
compareFunction function 类型,可选。用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为字符串的各个字符的 Unicode 位点进行排序

# 返回值

返回排序后的数组,原数组已经被排序后的数组代替。

# 示例

# 一维数组排序

  • 不指定排序方法
var scores = [1, 10, 21, 2];
scores.sort();
console.log(scores); // [ 1, 10, 2, 21 ]
// 10 在 2 之前,这是因为在 Unicode 指针顺序中"10"在"2"之前
  • 按数字大小升序
var numbers = [4, 2, 5, 1, 3];

numbers.sort(function(a, b) {
  return a - b;
});

console.log(numbers); // [ 1, 2, 3, 4, 5 ]
  • 按数字大小降序
var numbers = [4, 2, 5, 1, 3];

numbers.sort(function(a, b) {
  return b - a;
});

console.log(numbers); // [ 1, 2, 3, 4, 5 ]

# 二维数组排序

数组元素为对象,按照对象某个属性对其排序,在表格排序中常常见到。

# 按照 sortNo 属性从小到大排序:

var arr = [
  { sortNo: 2 },
  { sortNo: 1 },
  { sortNo: 5 },
  { sortNo: 6 },
  { sortNo: 7 },
  { sortNo: 3 },
  { sortNo: 9 },
  { sortNo: 4 },
  { sortNo: 0 }
];

arr.sort(function(a, b) {
  return a.sortNo - b.sortNo;
});

console.log(arr);
//输出结果
//{ 'sortNo': 0}
//{ 'sortNo': 1}
//{ 'sortNo': 2}
//{ 'sortNo': 3}
//{ 'sortNo': 4}
//{ 'sortNo': 5}
//{ 'sortNo': 6}
//{ 'sortNo': 7}
//{ 'sortNo': 9}

# 多条件排序

按照 sortNo 属性从小到大排序,如果 sortNo 相同,则按照 sortNo2 从大到小排序:

var arr = [
  { sortNo: 2, sortNo2: 3 },
  { sortNo: 1, sortNo2: 3 },
  { sortNo: 5, sortNo2: 3 },
  { sortNo: 6, sortNo2: 3 },
  { sortNo: 7, sortNo2: 3 },
  { sortNo: 3, sortNo2: 4 },
  { sortNo: 3, sortNo2: 2 },
  { sortNo: 3, sortNo2: 1 },
  { sortNo: 3, sortNo2: 3 },
  { sortNo: 8, sortNo2: 3 },
  { sortNo: 4, sortNo2: 1 },
  { sortNo: 4, sortNo2: 2 }
];

arr.sort(function(a, b) {
  if (a.sortNo == b.sortNo) {
    return b.sortNo2 - a.sortNo2;
  }
  return a.sortNo - b.sortNo;
});

console.log(arr);
// [
//  {sortNo: 1, sortNo2: 3}
//  {sortNo: 2, sortNo2: 3}
//  {sortNo: 3, sortNo2: 4}
//  {sortNo: 3, sortNo2: 3}
//  {sortNo: 3, sortNo2: 2}
//  {sortNo: 3, sortNo2: 1}
//  {sortNo: 4, sortNo2: 2}
//  {sortNo: 4, sortNo2: 1}
//  {sortNo: 5, sortNo2: 3}
//  {sortNo: 6, sortNo2: 3}
//  {sortNo: 7, sortNo2: 3}
//  {sortNo: 8, sortNo2: 3}
// ]

# 数字数组随机排序(洗牌算法)

将下面代码在 chrome 开发工具的 console 控制台执行,每次执行都会打印不同的结果。

var arr = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ];
arr.sort(function(a, b) {
  return Math.random() > 0.5 ? 1 : -1;
});
console.log(arr);
// [9, 7, 10, 5, 4, 13, 3, 8, 6, 12, 11]
上次更新: 8/9/2021, 11:31:12 AM