使用JavaScript编写多字段排序方法,按照姓名升序、年龄降序排列数组对象!

29 min read

可以使用 Array.sort() 方法来排序,对于多字段排序,我们可以通过比较两个对象的不同字段,来实现排序。排序方法如下:

function sortByMultipleFields(arr) {
  return arr.sort((a, b) => {
    if (a.name < b.name) {
      return -1;
    } else if (a.name > b.name) {
      return 1;
    } else {
      return b.age - a.age;
    }
  });
}

解释说明:

首先使用 sort() 方法对数组进行排序,该方法需要传入一个比较函数,函数将比较两个值,并返回一个表示它们之间关系的数字:

  • 如果 a 小于 b,则返回小于零的数字。
  • 如果 a 等于 b,则返回零。
  • 如果 a 大于 b,则返回大于零的数字。

由于我们需要对两个字段进行排序,首先按照 name 进行升序排序,如果 name 字段相等,则按 age 进行降序排序。因此,我们可以使用多个 if/else 语句进行排序。

完整代码如下:

const arr = [
  { name: "John", age: 32 },
  { name: "Jane", age: 24 },
  { name: "John", age: 45 },
  { name: "Adam", age: 19 },
];

function sortByMultipleFields(arr) {
  return arr.sort((a, b) => {
    if (a.name < b.name) {
      return -1;
    } else if (a.name > b.name) {
      return 1;
    } else {
      return b.age - a.age;
    }
  });
}

console.log(sortByMultipleFields(arr));

输出结果如下:

[
  { name: "Adam", age: 19 },
  { name: "Jane", age: 24 },
  { name: "John", age: 45 },
  { name: "John", age: 32 },
]