按数值(value)排序JavaScript对象,再按字符串(key)字母序排序
JavaScript对象按值降序、键字母序升序排序方案
你只需要修改sort的回调函数,在值相等时加入键的字母顺序比较逻辑即可,完整实现代码如下:
const words = { "be": 3, "a": 5, "an": 3 }; // 转换为键值对数组并排序 const sortedEntries = Object.entries(words).sort(([keyA, valA], [keyB, valB]) => { // 优先按value降序排列 if (valB !== valA) { return valB - valA; } // value相同时,按key的字母升序排列 return keyA.localeCompare(keyB); }); // 将排序后的数组转回对象 const sortedWords = Object.fromEntries(sortedEntries); console.log(sortedWords); // 输出结果: // { // "a": 5, // "an": 3, // "be": 3 // }
代码说明
- 对象转数组:用
Object.entries()把原对象转换成[键, 值]格式的数组,因为JavaScript对象本身无法直接排序,必须借助数组的sort方法。 - 排序逻辑:
- 先比较两个项的
value,如果不相等,用valB - valA实现降序排列(大的值排在前面)。 - 如果
value相等,调用keyA.localeCompare(keyB),这个方法会按照自然字母顺序比较字符串,返回的结果刚好适配sort方法的要求,实现键的升序排列。
- 先比较两个项的
- 数组转对象:用
Object.fromEntries()把排序后的键值对数组转回对象,ES6及以上环境会保留数组的插入顺序,所以最终对象的键顺序符合预期。
内容的提问来源于stack exchange,提问作者Ghost
相关产品推荐
相关产品推荐

