You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中按值排序,值相同时按字母顺序排列的实现方法

对象键排序:按值降序,值相同按键升序

要实现你需要的排序逻辑,核心是在排序函数中先比较值的大小,值相等时再按键的字母顺序排序。具体实现步骤如下:

  • 将对象转换为键值对数组:使用Object.entries()方法把对象转为[键, 值]格式的数组,便于排序操作。
  • 自定义排序规则:
    1. 优先按值降序排列:通过b[1] - a[1]实现,值更大的元素会排在前面。
    2. 当值相等时,按键升序排列:利用字符串的localeCompare()方法,按字母顺序比较两个键,保证字母靠前的键排在前面。
  • 提取排序后的键:排序完成后,从键值对数组中提取出所有键即可。

完整代码示例:

const obj = { Peter: 3, Jeremy: 2, Chris: 1, Adam: 2 };

const sortedKeys = Object.entries(obj)
  .sort((a, b) => {
    // 先按值降序比较
    const valueDifference = b[1] - a[1];
    if (valueDifference !== 0) {
      return valueDifference;
    }
    // 值相同时,按键的字母升序比较
    return a[0].localeCompare(b[0]);
  })
  .map(item => item[0]);

console.log(sortedKeys); // 输出:['Peter', 'Adam', 'Jeremy', 'Chris']

简单说明:

  • Object.entries(obj) 会生成数组:[['Peter', 3], ['Jeremy', 2], ['Chris', 1], ['Adam', 2]]
  • 排序时,Peter的值3最大,直接排在首位;Jeremy和Adam的值都是2,进入键的比较逻辑,'Adam'.localeCompare('Jeremy') 返回负数,因此Adam排在Jeremy之前;最后是值为1的Chris。
  • 最终通过map方法提取所有键,得到你期望的排序结果。

内容的提问来源于stack exchange,提问作者Aden Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:35:28