簡體   English   中英

JavaScript 縮小內 Map

[英]JavaScript Reduce Inside Map

我正在嘗試根據對象屬性之一的總和對對象數組進行排序。 本質上,像這樣:

array = [
          {
            id:4,
            tally: [1, 3, 5]
          },
         {
            id: 6,
            tally: [2, 3, 6]
         },
         {
            id: 9,
            tally: [2, 1, -1]
         }
]

如果我們將相應的tally s 相加,我們將分別得到 9、11 和 2,在這種情況下,我想要這樣的東西:

array = [
          {
            id:6,
            tally: [2, 3, 6]
          },
         {
            id: 6,
            tally: [1, 3, 5]
         },
         {
            id: 9,
            tally: [2, 1, -1]
         }
]

我知道這是map的某種組合, reduce但我正在努力了解如何以正確的 React 格式對其進行編碼。

您可以首先使用map計算每個reduce中的總和,然后使用sort方法對新數組進行排序,然后使用另一個map方法刪除 sum 屬性

 const array = [{ id: 4, tally: [1, 3, 5] }, { id: 6, tally: [2, 3, 6] }, { id: 9, tally: [2, 1, -1] } ] const sorted = array.map(({ tally, ...rest }) => ({ sum: tally.reduce((r, e) => r + e, 0), tally, ...rest })).sort((a, b) => b.sum - a.sum).map(({ sum, ...rest }) => rest) console.log(sorted)

你可以用sort做到這一點:

 var arr=[{id:4, tally: [1, 3, 5]}, {id: 6, tally: [2, 3, 6]}, {id: 9, tally: [2, 1, -1]} ] var result =arr.sort((a,b)=>{ aa = a.tally.reduce((acc,elem)=>acc+elem,0); bb = b.tally.reduce((acc,elem)=>acc+elem,0); return bb-aa; }); console.log(result);

您可以先將總和累加到Map中,其中每個鍵是 object 的id ,每個值是該對象的tally數組的總和。 您可以使用.reduce()來計算總和。 這里的acc是一個累積值,從 0 開始,每次調用 reduce 回調時都會被添加。

獲得每個 object 的總和后,您可以使用.sort()根據每個 object 的總和進行排序,如下所示:

 const array = [{ id: 4, tally: [1, 3, 5] }, { id: 6, tally: [2, 3, 6] }, { id: 9, tally: [2, 1, -1] }]; const sumMap = new Map(array.map( ({id, tally}) => [id, tally.reduce((acc, n) => acc+n, 0)]) ); const res = array.sort((a, b) => sumMap.get(b.id) - sumMap.get(a.id)); console.log(res);

暫無
暫無

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

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