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

Python提取数组中前3高value值的对象并降序排列求助

解决数组对象提取value排名前三的所有元素并降序排列问题

原数组

const originalArr = [
  {'id': 1, 'value': 3}, 
  {'id': 2, 'value': 6},
  {'id': 3, 'value': 8}, 
  {'id': 4, 'value': 8}, 
  {'id': 5, 'value': 10},
  {'id': 6, 'value': 9},
  {'id': 7, 'value': 8},
  {'id': 8, 'value': 4},
  {'id': 9, 'value': 5}
];

期望结果

[
  {'id': 5, 'value': 10},
  {'id': 6, 'value': 9},
  {'id': 7, 'value': 8},
  {'id': 3, 'value': 8}, 
  {'id': 4, 'value': 8}
]

实现思路

  • 提取数组中所有唯一的value值,按降序排序后取前三个值,确定需要保留的目标value集合
  • 过滤原数组,只保留value属于目标集合的元素
  • 对过滤后的数组先按value降序排序,若value相同则按id降序排序(匹配期望结果的元素顺序)

代码实现

// 提取所有唯一的value并降序排序
const uniqueValues = [...new Set(originalArr.map(item => item.value))].sort((a, b) => b - a);
// 获取前三的value值
const topThreeValues = uniqueValues.slice(0, 3);
// 过滤出符合条件的元素并排序
const result = originalArr
  .filter(item => topThreeValues.includes(item.value))
  .sort((a, b) => {
    // 先按value降序
    if (b.value !== a.value) {
      return b.value - a.value;
    }
    // value相同时按id降序,匹配期望结果的顺序
    return b.id - a.id;
  });

console.log(result);

代码解释

  1. 提取唯一value并排序:通过map提取所有元素的value,用Set去重后转为数组,再按降序排序得到[10,9,8,6,5,4,3]
  2. 获取前三value:用slice(0,3)截取排序后的前三个值,得到[10,9,8]
  3. 过滤元素:用filter筛选出value在前三集合内的元素
  4. 排序:优先按value降序排列,当value相同时按id降序排列,最终得到与期望一致的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:06:17