gpt4 book ai didi

javascript - 如何获取比数组中其他元素更大的3个对象javascript

转载 作者:行者123 更新时间:2023-12-01 00:15:56 24 4
gpt4 key购买 nike

我有一个由对象组成的数组。每个对象都有两个属性:名称、值。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com