我有一个由对象组成的数组。每个对象都有两个属性:名称、值。
array = [
{
name: 'name1',
value: 0
},
{
name: 'name2',
value: 2
},
{
name: 'name3',
value: 4
},
{
name: 'name4',
value: 4
},
{
name: 'name5',
value: 3
},
{
name: 'name6',
value: 2
},
{
name: 'name7',
value: 0
},
{
name: 'name8',
value: 1
},
...
]
如何获取具有最高值(value)属性的对象?
在上面的示例中,我应该恢复具有 value = 4
的对象。 , value = 3
, value = 2
(即前 3 个最大值)
我尝试过这样的事情:
let first: 0
let second: 0
let third: 0
array.map((res: any) => {
if (res.value > first) {
third = second
second = first
first = res
} else if (res.value > second) {
third = second
second = res
} else if (res.value > third) {
third = res
}
})
问题是,如果有两个或多个具有相同值的对象,它不会返回两个或多个对象,而只会返回一个。
最佳答案
您需要先对数组进行排序,然后找到包含前 3 个值的所有元素。为此,您可能需要保持一个数组检查是否已推送包含相同值的所有元素。
var pickedValues = [];
array = array
.sort((a, b) => a.value > b.value ? -1 : 1)
.filter(el => {
if(pickedValues.length === 3 && !pickedValues.includes(el.value)) return false;
if(!pickedValues.includes(el.value)) pickedValues.push(el.value);
return true;
});
检查下面的工作代码:
var array = [{
name: 'name1',
value: 0
},
{
name: 'name2',
value: 2
},
{
name: 'name3',
value: 4
},
{
name: 'name4',
value: 4
},
{
name: 'name5',
value: 3
},
{
name: 'name6',
value: 2
},
{
name: 'name7',
value: 0
},
{
name: 'name8',
value: 1
},
];
var pickedValues = [];
array = array
.sort((a, b) => a.value > b.value ? -1 : 1)
.filter(el => {
if(pickedValues.length === 3 && !pickedValues.includes(el.value)) return false;
if(!pickedValues.includes(el.value)) pickedValues.push(el.value);
return true;
});
console.log(array)
关于javascript - 如何获取比数组中其他元素更大的3个对象javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59768493/