對物件陣列中重複鍵的值進行求和
在JavaScript 中,處理物件陣列時,可能會遇到這樣的需求合併重複的鍵並對它們的關聯值求和。給定一個物件數組,例如:
objArr = [ {key: "Mon Sep 23 2013 00:00:00 GMT-0400", val: 42}, {key: "Mon Sep 24 2013 00:00:00 GMT-0400", val: 78}, {key: "Mon Sep 25 2013 00:00:00 GMT-0400", val: 23}, {key: "Mon Sep 23 2013 00:00:00 GMT-0400", val: 54} // duplicate key ]
人們的目標是實現以下目標:
reducedObjArr = [ {key: "Mon Sep 23 2013 00:00:00 GMT-0400", val: 96}, {key: "Mon Sep 24 2013 00:00:00 GMT-0400", val: 78}, {key: "Mon Sep 25 2013 00:00:00 GMT-0400", val: 23} ]
一個更有效的方法是利用Map 和Reduce,而不是迭代和推送值:
let counts = objArr.reduce((prev, curr) => { let count = prev.get(curr.key) || 0; prev.set(curr.key, curr.val + count); return prev; }, new Map());
這將建立一個Map,其中鍵作為物件鍵,值作為求和值。最後,Map 透過以下方式轉換回陣列:
let reducedObjArr = [...counts].map(([_, value]) => { return {key, value} })
這種方法更加簡潔,並且消除了與手動迭代相關的錯誤風險。
以上是如何有效地對 JavaScript 物件陣列中重複鍵的值求和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!