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

标签 javascript arrays object

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

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/

相关文章:

javascript - google maps api v3 - 从外部点击打开信息窗口

javascript - 如何在 Angular JS 中创建服务?

javascript - 如何将 3d 数组转换为 2d 数组

c - 通过引用 C 中的函数传递数组

JavaScript - 通过计数查找对象数组中的唯一值并创建新的对象数组

javascript - Ngrx 选择器不触发更新

python - Pandas:从保留其顺序的 2D numpy 数组创建数据框

java - 将用户输入存储在不是从 0 开始的数组中

javascript - 将数字类型项目添加到顶部插入的对象

iphone - 代码/iOS : Iterating through all instances of a given class?