js实现orderby
实现 JavaScript 的 orderBy 功能
在 JavaScript 中,可以通过自定义排序函数或使用 Array.prototype.sort() 方法实现类似 orderBy 的功能。以下是几种常见的实现方式:
基础数组排序
对简单数组进行升序或降序排序:

const numbers = [3, 1, 4, 1, 5, 9];
// 升序
numbers.sort((a, b) => a - b); // [1, 1, 3, 4, 5, 9]
// 降序
numbers.sort((a, b) => b - a); // [9, 5, 4, 3, 1, 1]
对象数组按属性排序
对对象数组根据某个属性值排序:
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
// 按 age 升序
users.sort((a, b) => a.age - b.age);
// 按 name 字母顺序
users.sort((a, b) => a.name.localeCompare(b.name));
多条件排序
实现先按一个属性排序,再按另一个属性排序:

const items = [
{ name: 'Apple', category: 'Fruit', price: 1 },
{ name: 'Orange', category: 'Fruit', price: 2 },
{ name: 'Carrot', category: 'Vegetable', price: 1 }
];
items.sort((a, b) => {
// 先按 category 排序
if (a.category !== b.category) {
return a.category.localeCompare(b.category);
}
// 相同 category 再按 price 排序
return a.price - b.price;
});
通用 orderBy 函数
封装一个通用的 orderBy 函数,支持多字段排序:
function orderBy(array, keys, orders = 'asc') {
return array.sort((a, b) => {
if (!Array.isArray(keys)) keys = [keys];
if (!Array.isArray(orders)) orders = [orders];
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const order = orders[i] || 'asc';
const compare = order === 'desc' ? -1 : 1;
if (a[key] > b[key]) return compare;
if (a[key] < b[key]) return -compare;
}
return 0;
});
}
// 使用示例
const data = [
{ name: 'Alice', age: 25, score: 90 },
{ name: 'Bob', age: 30, score: 85 },
{ name: 'Charlie', age: 20, score: 95 }
];
// 按 age 升序
orderBy(data, 'age');
// 按 score 降序
orderBy(data, 'score', 'desc');
// 多字段排序:先按 age 升序,再按 score 降序
orderBy(data, ['age', 'score'], ['asc', 'desc']);
使用 Lodash 库
如果需要更强大的排序功能,可以使用 Lodash 的 _.orderBy 方法:
const _ = require('lodash');
const sorted = _.orderBy(
[
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
],
['age'], // 排序字段
['desc'] // 排序顺序
);
这些方法涵盖了 JavaScript 中实现排序功能的不同场景,从简单到复杂,可以根据实际需求选择合适的实现方式。






