gpt4 book ai didi

javascript - 如何在 typescript 中使用map-reduce过滤具有最大值属性的列表?

转载 作者:行者123 更新时间:2023-11-28 16:58:45 25 4
gpt4 key购买 nike

我有一个列表如下:

let scores = [{name: "A", skills: 50, result: 80},
{name: "B", skills: 40, result: 90},
{name: "C", skills: 60, result: 60},
{name: "D", skills: 60, result: 70}];

我想过滤在 typescript 中使用 Map-Reduce 获得最大技能值的列表。

output = [{name: "C", skills: 60, result: 60},
{name: "D", skills: 60, result: 70}];

我尝试了如下并得到了预期的输出:

let scores = [{name: "A", skills: 50, result: 80},
{name: "B", skills: 40, result: 90},
{name: "C", skills: 60, result: 60},
{name: "D", skills: 60, result: 70}];

let maxSkillValue = Math.max.apply(Math, scores.map(function (o) { return o.skills; }));
let output = scores.filter(i => i.skills === maxSkillValue);

console.log(output);

使用Map-Reduce寻找答案。

最佳答案

您可以通过检查结果集或最后存储的最大技能值来减少数组,然后将此对象作为数组中的新结果集。否则检查技能是否相等,然后压入实际值并返回累加器。

要从一定数量的属性中获取最大对象,您可以存储每个属性的最大值并过滤部分结果集。

let scores = [{ name: "A", skills: 50, result: 80 }, { name: "B", skills: 40, result: 90 }, { name: "C", skills: 60, result: 60 }, { name: "D", skills: 60, result: 70 }],
maxSkills = scores.reduce((r, o) => {
if (!r || r[0].skills < o.skills) return [o];
if (r[0].skills === o.skills) r.push(o);
return r;
}, undefined),
keys = ['skills', 'result'],
max = scores.reduce((r, o) => {
keys.forEach(k => r[k] = Math.max(k in r ? r[k] : -Infinity, o[k]));
r._ = [...r._, o].filter(q => keys.some(k => r[k] === q[k]));
return r;
}, { _: [] })._;

console.log(maxSkills);
console.log(max);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何在 typescript 中使用map-reduce过滤具有最大值属性的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307117/

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