How to group or merge this array of objects in javascript?

前端 未结 8 855
悲&欢浪女
悲&欢浪女 2020-12-18 23:22

I have an array of objects like below for example.

{name: \"Mc Donald\", quantity: 4, maleCount: 1, femaleCount: 0}
{name: \"KFC\", quantity: 9, maleCou         


        
8条回答
  •  一个人的身影
    2020-12-18 23:43

    More functional/universal approach

    const normalizeValue = (value) => value === undefined ? 0 : value
    const sumUpProps = (props = []) => (a = {}, b = {}) => {
      const result = {}
      
      props.forEach((prop) => {
        result[prop] = normalizeValue(a[prop]) + normalizeValue(b[prop])
      })
    
      return result
    }
    
    const data = [
      {name: "Mc Donald", quantity: 4, maleCount: 1, femaleCount: 0},
      {name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0},
      {name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0},
      {name: "Mc Donald", quantity: 4, maleCount: 0, femaleCount: 1},
      {name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1},
      {name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0},
      {name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1},
      {name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1}
    ]
    
    const entries = {}
    const sumObjects = sumUpProps(['quantity', 'maleCount', 'femaleCount'])
    
    data.forEach((item) => {
      const entry = entries[item.name] || {}
    
      entries[item.name] = sumObjects(entry, item)
    })
    
    
    console.log(entries)

提交回复
热议问题