如何使用ES6/JS从对象数组中获取价格最高的3个对象组成新数组
实现方案
核心逻辑非常简单:先对数组按价格降序排序,再截取前3个元素即可,注意要先拷贝原数组避免sort方法的原地修改污染原数据。
完整可运行代码
const data = [ { name: 'x', color: 'red', price: 15 } , { name: 'y', color: 'black', price: 5 } , { name: 'z', color: 'yellow', price: 25 } , { name: 't', color: 'blue', price: 10 } , { name: 'n', color: 'blue', price: 60 } ] // 核心实现代码 const top3 = [...data].sort((a, b) => b.price - a.price).slice(0, 3) console.log(top3)
输出结果
[ { name: 'n', color: 'blue', price: 60 }, { name: 'z', color: 'yellow', price: 25 }, { name: 'x', color: 'red', price: 15 } ]
步骤说明
- 用
[...data]对原数组做浅拷贝,避免修改原始数据,如果你不需要保留原数组的原始顺序,可以省略拷贝直接写data.sort(...) sort((a, b) => b.price - a.price)实现按price从高到低降序排序slice(0, 3)截取排序后的前3个元素,生成新数组返回
特殊情况说明
如果存在多个对象价格相同的情况,该方法默认按原数组出现顺序排序,若需要自定义并列场景的排序规则,只需调整sort内的回调函数即可。
内容的提问来源于stack exchange,提问作者fatihcan8
相关产品推荐
相关产品推荐

