如何对含字符串key和数字count的JS对象数组进行多键排序?
实现JavaScript数组的多条件排序(count降序 + key升序)
没问题,你已经搞定了count降序的部分,只需要在排序函数里加个判断逻辑,当两个元素的count相等时,再按key的升序来排列就可以了。
核心思路
数组的sort方法依赖传入的比较函数返回值来决定元素顺序:
- 返回负数:
a排在b前面 - 返回正数:
b排在a前面 - 返回0:元素相对位置不变
所以我们可以先优先比较count的差值(实现降序),如果差值为0(也就是两个元素count相同),再用字符串的localeCompare方法比较key,以此实现升序排序。
完整代码示例
var array = [ {"count":7,"key":"a"}, {"count":10,"key":"b"}, {"count":5,"key":"c"}, {"count":10,"key":"a"}, {"count":3,"key":"d"} ]; // 多条件排序:先按count降序,count相等时按key升序 array.sort((a, b) => { // 先处理count的降序逻辑 const countDiff = b.count - a.count; if (countDiff !== 0) { return countDiff; } // count相同时,按key的字母升序排列 return a.key.localeCompare(b.key); }); console.log(array);
最终输出结果
[ {"count":10,"key":"a"}, {"count":10,"key":"b"}, {"count":7,"key":"a"}, {"count":5,"key":"c"}, {"count":3,"key":"d"} ];
这样就完全匹配你想要的排序效果了:count数值高的元素优先排在前面,当count相同时,key会按照字母升序排列(比如a会排在b前面)。
内容的提问来源于stack exchange,提问作者Kaleem Elahi
相关产品推荐
相关产品推荐

