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);
代码解释
- 提取唯一value并排序:通过
map提取所有元素的value,用Set去重后转为数组,再按降序排序得到[10,9,8,6,5,4,3] - 获取前三value:用
slice(0,3)截取排序后的前三个值,得到[10,9,8] - 过滤元素:用
filter筛选出value在前三集合内的元素 - 排序:优先按
value降序排列,当value相同时按id降序排列,最终得到与期望一致的结果
内容的提问来源于stack exchange,提问作者Beginer
相关产品推荐
相关产品推荐

