📌  相关文章
📜  如何在 JavaScript 中对集合进行排序?(1)

📅  最后修改于: 2023-12-03 15:08:39.204000             🧑  作者: Mango

如何在 JavaScript 中对集合进行排序?

在 JavaScript 中,可以通过调用 sort() 方法来对集合进行排序。sort() 方法原生支持对包含字符串或数字的集合进行排序,但需要手动实现比较函数以对对象集合进行排序。

对数字集合排序

对数字从小到大排序:

const numArr = [3, 1, 10, 5, 8];
numArr.sort(function(a, b) {
  return a - b;
});
console.log(numArr); // [1, 3, 5, 8, 10]

对数字从大到小排序:

const numArr = [3, 1, 10, 5, 8];
numArr.sort(function(a, b) {
  return b - a;
});
console.log(numArr); // [10, 8, 5, 3, 1]
对字符串集合排序

对字符串进行排序时,默认按字母顺序进行排序:

const strArr = ["apple", "banana", "orange", "pear"];
strArr.sort();
console.log(strArr); // ["apple", "banana", "orange", "pear"]

如果需要按字符串长度进行排序,则需要手动给 sort() 方法传递一个自定义比较函数:

const strArr = ["apple", "banana", "orange", "pear"];
strArr.sort(function(a, b) {
  return a.length - b.length;
});
console.log(strArr); // ["pear", "apple", "banana", "orange"]
对对象集合排序

对对象进行排序时,需要通过自定义比较函数来实现。比较函数需要返回一个负数/零/正数,指示两个对象的相对顺序。

例如,假设我们有以下对象集合:

const personArr = [
  { name: "John", age: 30 },
  { name: "Bob", age: 20 },
  { name: "Alice", age: 25 }
];

将该集合按照年龄从小到大排序:

personArr.sort(function(a, b) {
  return a.age - b.age;
});
console.log(personArr); 
// [{name: "Bob", age: 20}, {name: "Alice", age: 25}, {name: "John", age: 30}]

将该集合按照名字的字母顺序排序:

personArr.sort(function(a, b) {
  var nameA = a.name.toUpperCase(); // 不区分大小写
  var nameB = b.name.toUpperCase();
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }
  return 0;
});
console.log(personArr);
// [{name: "Alice", age: 25}, {name: "Bob", age: 20}, {name: "John", age: 30}]
总结

JavaScript 中的 sort() 方法可以对集合进行排序,我们可以通过自定义比较函数来对数字、字符串和对象集合进行排序。在使用排序算法时需要考虑效率和稳定性,若数据量过大或需要排序的集合比较复杂,考虑使用其它高性能的排序算法。