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

如何按数值降序排序键名不统一的JavaScript对象数组

实现方法

你已经摸到正确思路了,只需要在sort的比较函数里,先动态取出每个对象对应的数值,再做降序比较即可,逻辑和固定键名的排序写法本质完全一致。

直接可用的代码如下:

let ungroupedArr = [
   { Orange: 5 },
   { Red: 575 },
   { Green: 6544 },
   { Blue: 1307 }
]

const sortedArr = ungroupedArr.sort((a, b) => {
  // 直接取每个对象唯一的属性值
  const valueA = Object.values(a)[0]
  const valueB = Object.values(b)[0]
  // 降序排序用 b - a,需要升序就反过来写 a - b
  return valueB - valueA
})

逻辑说明

  • 你之前已经想到用Object.keys(element)[0]获取动态键名,这里用Object.values(element)[0]可以直接拿到对象唯一的属性值,省掉了通过键名二次索引取值的步骤。
  • Array.sort的比较函数不关心你怎么拿到要对比的数值,只要返回两个数值的差就能正确排序:固定键名时你写a.distance - b.distance,本质也是拿两个值做差,动态键只是换了个取值的方式而已。

如果你的业务场景里后续可能给对象加其他属性,需要固定取第一个键对应的值做排序,可以把取值逻辑换成你之前摸索出来的键名获取写法:

const sortedArr = ungroupedArr.sort((a, b) => {
  const keyA = Object.keys(a)[0]
  const keyB = Object.keys(b)[0]
  return b[keyB] - a[keyA]
})

以上代码运行后得到的结果和你期望的完全一致:

[
   { Green: 6544 },
   { Blue: 1307 },
   { Red: 575 },
   { Orange: 5 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:36:27