gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:29:47 24 4
gpt4 key购买 nike

我知道这里有类似的问题,但这些方法只返回一个最大值。我需要的是确定数组的哪些对象在给定属性中具有最大值,并返回那些在给定属性中具有最大值的对象中的某个 (other) 属性的值。

我有一个名为 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 我需要一种方法来返回一个 string 包含最高 < strong>"Traffic" value 如果只有一天,并且包含名称​​(作为字符串) 的数组具有最高“交通” 的日子如果有超过一天的最高“交通” ,因为在本例中将返回一个包含星期一星期五 的数组。

我试过这个:

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

但是有了这个,我只得到了属性 “traffic” 的一个最大值,即 13

还有这个:

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

对于最后一个,我得到一个具有最大流量值的对象,如下所示:

对象 { 名称:“星期五”,流量:13

最佳答案

你可以使用reduce。在每次迭代中,检查结果中是否存在具有较低或相等 traffic 属性的元素,如果是,则替换前一种情况的整个元素,或者将相等元素添加到结果中。如果以上都没有返回 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 - 在对象数组中的属性中查找具有最大值的所有对象,并从同一对象返回其他属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51404831/

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