首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用类型记录中的map-约简来筛选属性最大值的列表?

如何使用类型记录中的map-约简来筛选属性最大值的列表?
EN

Stack Overflow用户
提问于 2019-10-09 15:04:43
回答 2查看 1.1K关注 0票数 0

我有一个清单如下:

代码语言:javascript
复制
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}];

我想过滤的名单谁获得最大的技能值使用地图-减少在打字稿。

代码语言:javascript
复制
output = [{name: "C", skills: 60, result: 60},
          {name: "D", skills: 60, result: 70}];

我尝试了如下,并获得了预期的产出:

代码语言:javascript
复制
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);

使用地图寻找答案-减少

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-09 15:59:48

谢谢您的回答。如果任何对象在“技能”或“结果”中都有最大值,我如何筛选第一个列表?我的预期输出:输出={ name:"B",技能: 40,结果: 90 },{ name:"C",技能: 60,结果: 60 },{ name:"D",技能: 60,结果: 70 }- ImtiazNur

代码语言:javascript
复制
let scores = [{name: "A", skills: 500, result: 80},
              {name: "B", skills: 6000, result: 90},
              {name: "C", skills: 6000, result: 60},
              {name: "D", skills: 20, result: 60},
              {name: "E", skills: 10, result: 90}];

const maxSkill = scores.reduce((acc, curr) => curr.skills > acc ? curr.skills : acc, 0);
const maxResult = scores.reduce((acc, curr) => curr.result > acc ? curr.result : acc, 0);
const maxSkillsAndRes = scores.reduce((r, o) => (o.skills === maxSkill || o.result === maxResult) ? [...r,o] : r, []);

console.log(maxSkillsAndRes);

sry,大约第三行,你最好写:

代码语言:javascript
复制
const maxSkillsAndRes = scores.filter( o => o.skills === maxSkill || o.result === maxResult );

输出相同,但更具可读性。

票数 1
EN

Stack Overflow用户

发布于 2019-10-09 15:09:41

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

要从一定数量的属性中获取max对象,可以存储每个属性的最大值,并筛选部件结果集。

代码语言:javascript
复制
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);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58307117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档