我有一个清单如下:
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}];我想过滤的名单谁获得最大的技能值使用地图-减少在打字稿。
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);
使用地图寻找答案-减少。
发布于 2019-10-09 15:59:48
谢谢您的回答。如果任何对象在“技能”或“结果”中都有最大值,我如何筛选第一个列表?我的预期输出:输出={ name:"B",技能: 40,结果: 90 },{ name:"C",技能: 60,结果: 60 },{ name:"D",技能: 60,结果: 70 }- ImtiazNur
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,大约第三行,你最好写:
const maxSkillsAndRes = scores.filter( o => o.skills === maxSkill || o.result === maxResult );输出相同,但更具可读性。
发布于 2019-10-09 15:09:41
您可以通过检查结果集或最后存储的最大技能值来减少数组,然后将此对象作为数组中的新结果集。其他人检查技能是否相等,然后推送实际值并返回累加器。
要从一定数量的属性中获取max对象,可以存储每个属性的最大值,并筛选部件结果集。
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; }
https://stackoverflow.com/questions/58307117
复制相似问题