📅  最后修改于: 2023-12-03 15:37:36.503000             🧑  作者: Mango
在 JavaScript 中,我们可以使用 Array.prototype.sort()
方法对数组进行排序。默认情况下,sort()
方法将按照字符串的Unicode编码位置进行排序。如果要按升序排序,我们可以传入一个比较函数来指定排序规则。
下面演示如何按照对象数组中某个属性的值升序排序:
const users = [
{ name: 'John', age: 25 },
{ name: 'Jane', age: 18 },
{ name: 'Bob', age: 40 },
{ name: 'Mary', age: 30 }
];
// 按照 age 属性升序排序
users.sort((a, b) => a.age - b.age);
console.log(users);
// 输出:
// [
// { name: 'Jane', age: 18 },
// { name: 'John', age: 25 },
// { name: 'Mary', age: 30 },
// { name: 'Bob', age: 40 }
// ]
上面的代码中,sort()
方法的比较函数接受两个参数 a
和 b
,代表待比较的两个数组元素。这里我们通过比较 a.age
和 b.age
的大小来指定排序规则,如果 a.age
大于 b.age
,则返回正数,否则返回负数或0。
我们也可以通过将比较函数封装成一个函数来重用,例如:
// 封装比较函数
function sortBy(key) {
return (a, b) => a[key] - b[key];
}
// 使用比较函数
users.sort(sortBy('age'));
console.log(users);
// 输出和上面一样
上面的 sortBy()
函数返回一个比较函数,该比较函数会在排序时比较数组元素的 key
属性的值,其中 key
由 sortBy()
函数的参数传入。
最后需要注意的是,sort()
方法会修改原数组,如果需要保留原数组,则需要先复制一份再进行排序,例如:
const sortedUsers = users.slice().sort(sortBy('age'));