js数组对象求和问题。

现在有

let arr = [
    {age: 10, price: 20},
    {age: 20, price: 30},
    {age: 30, price: 30}
]

然后对age和price求和。
想得到
{age: 60, price: 80}
这样的对象。

如果age和price属性名动态的又该如何写呢??
已解决 悬赏分:70 - 解决时间 2021-11-26 15:08
反对 0举报 0 收藏 0

回答5

最佳
  • @
    function add(arr){
        let obj = {}
        arr.map(value=>{
            Object.keys(value).map(key=>{
                if(obj[key]){
                    obj[key]+=value[key]
                }else{
                    obj[key]=value[key]
                }
            })
        })
        return obj
    }
    支持 0 反对 0 举报
    2021-11-26 03:01
  • @
    const sum = (...columns) => arr => arr.reduce((a, b) => columns.reduce((c, d) => ({...c, [d]: a[d] + b[d]}), {}))

    image.png

    支持 0 反对 0 举报
    2021-11-26 04:39
  • @
    function getSum(key1, key2, ary) {
      return ary.reduce((pre, next) => {
        pre[key1] = (pre[key1] || 0) + (next[key1] || 0)
        pre[key2] = (pre[key2] || 0) + (next[key2] || 0)
        return pre
      }, {})
    }
    
    let res = getSum('age', 'price', arr)
    
    支持 0 反对 0 举报
    2021-11-26 05:07
  • @
    function sum(arr) {
        return arr.reduce((res, v) => {
            return Object.keys(v).reduce((res, k) => {
                res[k] = (res[k] || 0) + v[k];
                return res;
            }, res);
        }, {})
    }
    支持 0 反对 0 举报
    2021-11-26 05:43
  • @
    const merge = data => {
        return data.reduce((acc, cur) => {
            const obj = {...acc}
            for(let attr in cur) {
                if(cur.hasOwnProperty(attr)) {
                    if(obj[attr]) {
                        obj[attr] += cur[attr]
                    }else {
                        obj[attr] = cur[attr]
                    }
                }
            }
            return obj
        }, {})
    }
    merge(arr)
    支持 0 反对 0 举报
    2021-11-26 06:14