js实现orderby
在JavaScript中实现orderBy功能可以通过多种方式完成,以下是几种常见的方法:
使用Array.prototype.sort()
JavaScript数组的sort()方法可以用于排序,默认按Unicode码点排序。对于数字或自定义排序,需传入比较函数。
const data = [3, 1, 4, 2];
data.sort((a, b) => a - b); // 升序 [1, 2, 3, 4]
data.sort((a, b) => b - a); // 降序 [4, 3, 2, 1]
对象数组按属性排序
若需对对象数组按某个属性排序,比较函数需访问对象属性。
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
users.sort((a, b) => a.age - b.age); // 按age升序
多条件排序
通过扩展比较函数实现多条件排序。例如先按年龄升序,年龄相同再按姓名升序。
users.sort((a, b) => {
if (a.age !== b.age) return a.age - b.age;
return a.name.localeCompare(b.name);
});
实现通用的orderBy函数
封装一个通用的orderBy函数,支持指定排序字段和方向。
function orderBy(array, key, direction = 'asc') {
return array.sort((a, b) => {
const valueA = a[key];
const valueB = b[key];
const order = direction === 'desc' ? -1 : 1;
if (valueA < valueB) return -1 * order;
if (valueA > valueB) return 1 * order;
return 0;
});
}
// 使用示例
orderBy(users, 'age', 'desc'); // 按age降序
使用Lodash库
Lodash提供了强大的_.orderBy函数,支持多字段和复杂排序。
const _ = require('lodash');
const sortedUsers = _.orderBy(users, ['age', 'name'], ['asc', 'desc']);
性能注意事项
对于大数据集,需注意sort()是原地排序(修改原数组),若需保留原数组,应先拷贝。

const sortedArray = [...originalArray].sort(compareFunction);






