簡體   English   中英

按值比較數組中的所有對象

[英]Compare all objects in array by value against each other

我試圖確定數組中哪個 object 的屬性值大於其他對象,但根據某些條件。

我有一組代表員工及其直線經理的對象,如果一個人向直線經理報告等於 rest 但他們的Rank更高我希望能夠通過添加 1 在屬性LineManager上反映這一點。一個很好的例子是Tomas ,他的Rank為 6,並向Peter報告,但所有其他也向Peter報告的人的Rank為 5。

我已經設法得到了正確的 output :

 const data = [ { Name: 'Peter', ReportsTo: '', LineManager: '', Rank: 4 }, { Name: 'Tom', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, { Name: 'Adam', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, { Name: 'Maria', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, { Name: 'Fiona', ReportsTo: 'Maria', LineManager: 0, Rank: 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 } ] 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)

但我怎么能做到更深層次呢? 例如, FionaMaria匯報, Rank為 7,而William的排名為 6。理想情況下, Fiona也會有LineManager: 1

所需的 output 是這樣,但順序不相關

[ 
  { Name: 'Peter', ReportsTo: '', LineManager: '', Rank: 4 }, 
  { Name: 'Tom', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, 
  { Name: 'Adam', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, 
  { Name: 'Maria', ReportsTo: 'Peter', LineManager: 0, Rank: 5 },
  { Name: 'Tomas', ReportsTo: 'Peter', LineManager: 1, Rank: 6 },  
  { Name: 'William', ReportsTo: 'Maria', LineManager: 0, Rank: 6 }, 
  { Name: 'Vicky', ReportsTo: 'Maria', LineManager: 0, Rank: 6 },
  { Name: 'Fiona', ReportsTo: 'Maria', LineManager: 1, Rank: 7 } 
] 

如果Rank不是組的最小值,您可以收集所有ReportsTo組和 map new object 的最小排名,並增加值。

 const data = [{ Name: 'Peter', ReportsTo: '', LineManager: '', Rank: 4 }, { Name: 'Tom', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, { Name: 'Adam', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, { Name: 'Maria', ReportsTo: 'Peter', LineManager: 0, Rank: 5 }, { Name: 'Fiona', ReportsTo: 'Maria', LineManager: 0, Rank: 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 }], 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; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM