JavaScript对象数组按KEY排序:按score键降序的最佳实践
对象数组按score降序排序的最佳实践
嘿,我来帮你搞定这个排序问题!你说用Underscore.js的_.sortBy没成功,大概率是因为它默认是升序排列的,和你要的降序刚好相反。下面给你几种靠谱的最佳实践,不管用不用Underscore都能轻松解决:
一、原生JavaScript方案(无需依赖库)
现在原生JS的数组方法已经足够强大,直接用Array.sort()就能实现,代码简洁还不用额外引入库:
// 示例数组 const scoreList = [ { name: "Luna", score: 90 }, { name: "Harry", score: 95 }, { name: "Ron", score: 82 } ]; // 按score降序排序 scoreList.sort((a, b) => b.score - a.score);
原理很简单:sort()的比较函数返回值决定了元素顺序——返回正数时b排在a前面,负数则相反,用b.score - a.score直接就能实现降序。如果是升序就换成a.score - b.score。
二、Underscore.js的正确用法
如果你的项目已经依赖Underscore,有两种方式实现降序:
1. 用_.sortBy + _.reverse(兼容所有Underscore版本)
_.sortBy默认返回升序数组,我们只需要把结果反转一下就行:
const sortedList = _.reverse(_.sortBy(scoreList, 'score'));
2. 用_.orderBy(Underscore 1.8及以上版本支持)
这个方法更直观,直接指定排序方向:
// 第二个参数是排序字段,第三个参数传入'desc'表示降序 const sortedList = _.orderBy(scoreList, 'score', 'desc');
如果要多字段排序也很方便,比如先按score降序,再按name升序:
const sortedList = _.orderBy(scoreList, ['score', 'name'], ['desc', 'asc']);
总结最佳实践
- 如果不需要依赖第三方库,优先用原生
Array.sort(),轻量且性能出色; - 如果已经在用Underscore,且版本≥1.8,推荐用
_.orderBy,代码可读性更高;旧版本就用_.sortBy加_.reverse的组合。
内容的提问来源于stack exchange,提问作者Filippo oretti
相关产品推荐
相关产品推荐

