如何解决按值比较数组中的所有对象
我正在尝试根据某些条件确定数组中哪个对象的属性值大于其他对象。
我得到了一组代表员工及其直线经理的对象,如果一个人向与其他人相同的直线经理报告,但他们的 Rank
更高,我希望能够将其反映在属性 { {1}} 加 1。一个很好的例子是 LineManager
他的 Tomas
为 6 并向 Rank
报告,但所有其他也向 Peter
报告的人都有Peter
为 5。
我设法得到了正确的输出:
Rank
但是我怎么能做到更深层次呢?例如,const data = [
{
Name: 'Peter',ReportsTo: '',LineManager: '',Rank: 4
},{
Name: 'Tom',ReportsTo: 'Peter',LineManager: 0,Rank: 5
},{
Name: 'Adam',{
Name: 'Maria',{
Name: 'Fiona',ReportsTo: 'Maria',Rank: 7
},{
Name: 'William',Rank: 6
},{
Name: 'Tomas',{
Name: 'Vicky',Rank: 6
}
]
const lineManager = data.find(({ ReportsTo }) => ReportsTo === '').Name
const rest = data.filter(item => (item.ReportsTo === lineManager))
const min = Math.min.apply( Math,rest.map(({ Rank }) => Rank ))
const final = data.map(item => {
if (item.Rank > min && item.ReportsTo !== '' && item.ReportsTo === lineManager) {
return {
...item,LineManager: 1
}
} else {
return {
...item
}
}
})
console.log(final)
向 Fiona
报告,Maria
为 7,而 Rank
为 6。理想情况下,William
也会有 Fiona
所需的输出是这个,但顺序不相关
LineManager: 1
解决方法
如果 ReportsTo
不是组的最小值,您可以收集所有 Rank
组的最小等级并映射具有递增值的新对象。
const
data = [{ Name: 'Peter',ReportsTo: '',LineManager: '',Rank: 4 },{ Name: 'Tom',ReportsTo: 'Peter',LineManager: 0,Rank: 5 },{ Name: 'Adam',{ Name: 'Maria',{ Name: 'Fiona',ReportsTo: 'Maria',Rank: 7 },{ Name: 'William',Rank: 6 },{ Name: 'Tomas',{ Name: 'Vicky',Rank: 6 }],temp = data.reduce((r,o) => {
r[o.ReportsTo] ??= Number.POSITIVE_INFINITY;
if (r[o.ReportsTo] > o.Rank) r[o.ReportsTo] = o.Rank;
return r;
},{}),result = data.map(o => ({ ...o,LineManager: temp[o.ReportsTo] === o.Rank
? o.LineManager
: o.LineManager + 1
}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。