亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript 減少內部映射

JavaScript 減少內部映射

www說 2022-10-13 10:54:28
我正在嘗試根據對象屬性之一的總和對對象數組進行排序。本質上,像這樣: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 格式對其進行編碼。
查看完整描述

3 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

您可以首先使用計算每個對象的總和,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)


查看完整回答
反對 回復 2022-10-13
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

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

獲得每個對象的總和后,您可以使用.sort()如下方式根據每個對象的總和進行排序:

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);


查看完整回答
反對 回復 2022-10-13
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

你可以這樣做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);


查看完整回答
反對 回復 2022-10-13
  • 3 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號