鍍金池/ 問答/HTML/ 數(shù)組有些相同的ID與數(shù)量不同的情況下如何能疊加合并?

數(shù)組有些相同的ID與數(shù)量不同的情況下如何能疊加合并?

let badge = [{id: 323, badge: 10},{id: 323, badge: 10},{id: 311, badge: 1},{id: 311, badge: 1},{id: 311, badge: 1},{id: 311, badge: 1},{id: 352, badge: 3},{id: 352, badge: 100},{id: 480, badge: 5}]

//怎么疊加 參考這個(gè)計(jì)算結(jié)果
let badgeMerge = [{id: 323, badge: 20},{id: 311, badge: 4},{id: 352, badge: 103},{id: 480, badge: 5}]

這個(gè)數(shù)組有些相同的ID與數(shù)量不同的情況下如何能疊加合并?

回答
編輯回答
病癮
Object.values(badge.reduce((t,c)=>{
    (!t[c.id] && (t[c.id]= c)) || (t[c.id] && (t[c.id].badge += c.badge));
    return t;
}, {}));
2017年4月4日 06:11
編輯回答
獨(dú)特范
  let keys = Array.from(new Set(badge.map(item => item.id)))
  var badgeMerge = keys.map(key => {
    return {
      id: key,
      badge: badge.filter(item => item.id == key).reduce((pre, cur) => pre+cur.badge, 0)
    }
  })
2018年5月30日 23:43
編輯回答
空痕
  • 如果數(shù)組元素是有序且連續(xù)的,使用 Array.prototype.reduce 就好,當(dāng)每次 id 相同時(shí),合并元素但不記錄結(jié)果,當(dāng)每次 id 不相同時(shí),記錄結(jié)果
  • 如果數(shù)組元素是無序且非連續(xù)的,可以先按 id 分組,之后每個(gè)組分別使用 Array.prototype.reduce 生成一個(gè)結(jié)果元素,當(dāng)然也可以先按 id 排序,再使用第一種方法
2018年3月20日 04:54