json字符串如何合并和加总?php

好奇几个问题:
https://imgur.com/IbDlzIW (资料多笔,其中的两笔)
这种格式,如果想要把它⋯⋯
1.合并成一个 json ?

{"charm":1,"hp":1}, {"charm":2,"hp":1}
to
{"charm":3,"hp":2}

2.key 会不固定,但有机会重复,能怎么自动 sum?
每次可能都不同
{"charm":1,"hp":2}
{"charm":3,"ccc": 2, "hp":1}
{"aaa":3,"bbb":2, hp":2}

能怎么做?感谢各路好手

阅读 4.5k
4 个回答
let arr = [
    {"charm":1,"hp":2,"bbb":3},
    {"charm":3,"hp":2,"aaa":2}
]
    
function sum(arr) {
  return arr.reduce((pre,cur) => {
    Object.keys(cur).forEach(v => {
        if (!pre[v]) {
            pre[v] = cur[v]
        } else {
            pre[v] += cur[v]
        }
    })
    return pre;
 },{})
}
console.log(sum(arr)) //{charm: 4, hp: 4, bbb: 3, aaa: 2}

自己写也是能玩的

function customSum(arr){
    let obj={}
    if(!Array.isArray(arr)) return obj
    arr.forEach((item,index)=>{
        Object.keys(item).forEach(function(key){
            if(obj[key]){
                obj[key]=obj[key]+item[key]
            }else{
                obj[key]=item[key]
            }
        })
    })
    return obj
}
customSum([{"charm":1,"hp":2},{"charm":3,"ccc": 2, "hp":1},{"aaa":3,"bbb":2, hp:2}])

array_merge_recursive + array_sum

这个用 reduce方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题