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

问题描述

我正在尝试根据某些条件确定数组中哪个对象的属性值大于其他对象。

我得到了一组代表员工及其直线经理的对象,如果一个人向与其他人相同的直线经理报告,但他们的 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; }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...