You need to enable JavaScript to run this app. JavaScript如何按未知键的值排序对象数组,返回前3高值及并列对应的键
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何按未知键的值排序对象数组,返回前3高值及并列对应的键

单键值对象数组排序取前3(含并列)实现方案

原代码问题说明

你原有代码的问题在于直接对数组类型的obj调用Object.entries,得到的是「数组索引: 对应位置对象」的键值对,而非你需要的每个单键对象内部的键值,所以排序逻辑完全不生效。

实现思路

  • 先遍历原数组,把每个单键对象拆解为[键名, 数值]的二维数组项
  • 对二维数组按数值做降序排序
  • 提取排序后的所有数值,去重后取前3位的最小值作为「第三档分数线」
  • 筛选所有数值大于等于该分数线的项,提取对应键名即为结果

完整实现代码

function getTop3(arr) {
  // 拆解每个单键对象为[键, 值]格式
  const list = arr.map(item => {
    const [key, val] = Object.entries(item)[0]
    return [key, val]
  })
  // 按值降序排序
  list.sort((a, b) => b[1] - a[1])
  // 计算第三档分数线,兼容总分数不足3种的场景
  const uniqueScores = [...new Set(list.map(i => i[1]))]
  const threshold = uniqueScores.length >= 3 ? uniqueScores[2] : uniqueScores.at(-1)
  // 筛选符合条件的键名返回
  return list.filter(i => i[1] >= threshold).map(i => i[0])
}

效果验证

测试示例1

const arr1 = [
  {'tom':4},
  {'bill':5},
  {'tina':6},
  {'tim': 3}
]
console.log(getTop3(arr1)) // 输出:['tina', 'bill', 'tom']

测试示例2

const arr2 = [
  {'tom':4},
  {'bill':5},
  {'tina':6},
  {'tim': 3},
  {'jim':4}
]
console.log(getTop3(arr2)) // 输出:['tina', 'bill', 'tom', 'jim']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:48:03