Javascript 按值相互比较数组中的所有对象

Javascript 按值相互比较数组中的所有对象,javascript,arrays,ecmascript-6,javascript-objects,ecmascript-2016,Javascript,Arrays,Ecmascript 6,Javascript Objects,Ecmascript 2016,我试图确定数组中哪个对象的属性值大于其他对象,但这取决于某些条件 我得到了一个表示员工及其直线经理的对象数组,如果一个人向直线经理报告的人数与其他人相等,但他们的级别更高,我希望能够通过添加1在属性直线经理上反映这一点。一个很好的例子是Tomas他的Rank为6,向Peter报告,但所有其他也向Peter报告的人的Rank为5 我已通过以下方式获得了正确的输出: const数据=[ { 姓名:'彼得', 报告至:'', 线路管理器:“”, 排名:4 }, { 名字:“汤姆”, 记者:'彼得',

我试图确定数组中哪个对象的属性值大于其他对象,但这取决于某些条件

我得到了一个表示员工及其直线经理的对象数组,如果一个人向直线经理报告的人数与其他人相等,但他们的
级别更高,我希望能够通过添加1在属性
直线经理
上反映这一点。一个很好的例子是
Tomas
他的
Rank
为6,向
Peter
报告,但所有其他也向
Peter
报告的人的
Rank
为5

我已通过以下方式获得了正确的输出:

const数据=[
{
姓名:'彼得',
报告至:'',
线路管理器:“”,
排名:4
},
{
名字:“汤姆”,
记者:'彼得',
生产线经理:0,
排名:5
},
{
名字:'亚当',
记者:'彼得',
生产线经理:0,
排名:5
},
{
姓名:'玛丽亚',
记者:'彼得',
生产线经理:0,
排名:5
},
{
姓名:“菲奥娜”,
记者:玛丽亚,
生产线经理:0,
排名:7
},
{
名字:“威廉”,
记者:玛丽亚,
生产线经理:0,
排名:6
},
{
姓名:“托马斯”,
记者:'彼得',
生产线经理:0,
排名:6
},
{
姓名:“Vicky”,
记者:玛丽亚,
生产线经理:0,
排名:6
}
]
const lineManager=data.find({ReportsTo}=>ReportsTo==='').Name
常量rest=data.filter(item=>(item.ReportsTo===lineManager))
const min=Math.min.apply(Math,rest.map(({Rank})=>Rank))
const final=data.map(项=>{
如果(item.Rank>min&&item.ReportsTo!=''&&item.ReportsTo===行管理器){
返回{
…项目,
生产线经理:1
}
}否则{
返回{
…项目
}
}
})

console.log(final)
如果
不是组的最小值,则可以将所有
报告的最小秩收集到
组中,并用递增的值映射新对象

const
数据=[{Name:'Peter',ReportsTo:'',LineManager:'',秩:4},{Name:'Tom',ReportsTo:'Peter',LineManager:0,秩:5},{Name:'Adam',ReportsTo:'Peter',LineManager:0,秩:5},{Name:'Fiona ReportsTo:'Maria',LineManager:0,秩7},{Name:'William',ReportsTo:'Maria',LineManager:0,Rank:6},{Name:'Tomas',ReportsTo:'Peter',LineManager:0,Rank:6},{Name:'Vicky',ReportsTo:'Maria',LineManager:0,Rank:6}],
温度=数据减少((r,o)=>{
r[o.ReportsTo]??=正无穷大数;
如果(r[o.ReportsTo]>o.Rank)r[o.ReportsTo]=o.Rank;
返回r;
}, {}),
结果=data.map(o=>({…o,LineManager:temp[o.ReportsTo]==o.Rank
?o.LineManager
:o.LineManager+1
}));
console.log(结果);

。作为控制台包装器{max height:100%!important;top:0;}
您能添加完整的结果吗?我已经添加了所需的输出哇,谢谢,这是一个非常紧凑的设计,效果非常好。这太棒了。