javascript – 在对象数组中的属性中查找具有最大值的所有对象,并从同一对象返回其他属性的值

我知道这里有类似的问题,但是使用这些方法只返回一个最大值.我需要的是确定数组中哪些对象在给定属性中具有该最大值,并返回在给定属性中具有最大值的那些对象中的某个(其他)属性的值.
我有这个名为week的对象数组,有两个属性“name”和“traffic”:

[
 { name: "Saturday", traffic: 12 },
 { name: "Sunday", traffic: 12 },
 { name: "Monday", traffic: 13 },
 { name: "Tuesday", traffic: 9 },
 { name: "Wednesday", traffic: 10 },
 { name: "Thursday", traffic: 8 },
 { name: "Friday", traffic: 13 },
]

在这种情况下,星期一和星期五的属性“流量”的最大值为13,我需要一种方法来返回一个字符串,如果只有一天,则返回包含具有最高“流量”值的日期的名称,以及一个数组如果有超过一天具有最高“流量”值的日期,则包含具有最高“流量”值的日期的名称(作为字符串),因为在这种情况下将返回包含星期一和星期五的数组.

我试过这个:

function getMaxTr() {
    return week.reduce((max, p) => p.traffic > max ? 
      p.traffic : max, week[0].traffic); 
}

但有了这个,我只得到了一个属性“流量”的最大值,即13.
还有这个:

let max = week [week.length - 1];

使用最后一个,我得到一个具有最大流量值的对象,如下所示:
对象{名称:“星期五”,流量:13}

最佳答案
你可以使用reduce.在每次迭代中,检查结果中是否存在具有较低或相等流量属性的元素,如果是,则替换前一种情况的整个事物,或者将相等的元素添加到结果中.如果以上都不返回true,则只需再次返回最后一个迭代的元素.

const arr = [
    { name: "Saturday", traffic: 12 },
    { name: "Sunday", traffic: 12 },
    { name: "Monday", traffic: 13 },
    { name: "Tuesday", traffic: 9 },
    { name: "Wednesday", traffic: 10 },
    { name: "Thursday", traffic: 8 },
    { name: "Friday", traffic: 13 },
];

let res = arr.reduce((a, b) => {
    let now = a.pop();
    if (now.traffic < b.traffic) return [b];
    if (now.traffic === b.traffic) return [...a, now, b];
    return [...a, now];
}, [arr[0]]).map(e => e.name);

res = res.length > 1 ? res : res[0];

console.log(res);

转载注明原文:javascript – 在对象数组中的属性中查找具有最大值的所有对象,并从同一对象返回其他属性的值 - 代码日志