为了账号安全,请及时绑定邮箱和手机立即绑定

简化嵌套对象并查找特定属性的总和

简化嵌套对象并查找特定属性的总和

慕容森 2022-09-02 10:25:40
我有一个嵌套的对象,如下所示。我想将嵌套对象简化为一个对象,并查找特定父对象的所有子级的特定属性的总和。当前对象let obj = {Myanmar: [    {        trk1: {            mou: 0.0,            ca: 1.0,            ccs: 0.0,            ccc: 0.0,        },    }],Gibraltar: [    {        trk1: {            mou: 12.850000381469727,            ca: 1.0,            ccs: 1.0,            ccc: 3.0,        },    }],Cyprus: [    {        trk1: {            mou: 36.25,            ca: 3.0,            ccs: 2.0,            ccc: 7.0,        },        trk2: {            mou: 27.299999237060547,            ca: 1.0,            ccs: 1.0,            ccc: 6.0,        },        trk3: {            mou: 80.59999752044678,            ca: 4.0,            ccs: 4.0,            ccc: 14.0,        },        trk4: {            mou: 26.716670513153076,            ca: 4.0,            ccs: 4.0,            ccc: 6.0,        }    }]};预期对象{Myanmar: {    mou: "(trk1-mou+trk2-mou+trk3-mou)",    ca: "(trk1-ca+trk2-ca+trk3-ca)"}};我想对嵌套对象执行属性的总和。我无法继续后得到对象.键请帮助.
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

我不确定这是否是你想要的:


var obj={"Myanmar": [{ "trk1": { "mou": 0.0, "ca": 1.0, "ccs": 0.0, "ccc": 0.0 }}],"Gibraltar": [{ "trk1": { "mou": 12.850000381469727, "ca": 1.0, "ccs": 1.0, "ccc": 3.0 }}],"Cyprus": [{ "trk1": { "mou": 36.25, "ca": 3.0, "ccs": 2.0, "ccc": 7.0 }, "trk2": { "mou": 27.299999237060547, "ca": 1.0, "ccs": 1.0, "ccc": 6.0 }, "trk3": { "mou": 80.59999752044678, "ca": 4.0, "ccs": 4.0, "ccc": 14.0 }, "trk4": { "mou": 26.716670513153076, "ca": 4.0, "ccs": 4.0, "ccc": 6.0 }}]}


result = Object.entries(obj).reduce((acc, [k,v])=>{

 acc[k] = acc[k] || {};

 Object.entries(v[0]).forEach(([_, country])=>{

 for(let [key, value] of Object.entries(country)){

     acc[k][key] = acc[k][key] || 0;

     acc[k][key] += value;

   }

 })

 return acc;

},{});



console.log(result);


查看完整回答
反对 回复 2022-09-02
?
长风秋雁

TA贡献1757条经验 获得超7个赞

var obj={"Myanmar": [{ "trk1": { "mou": 0.0, "ca": 1.0, "ccs": 0.0, "ccc": 0.0 }}],"Gibraltar": [{ "trk1": { "mou": 12.850000381469727, "ca": 1.0, "ccs": 1.0, "ccc": 3.0 }}],"Cyprus": [{ "trk1": { "mou": 36.25, "ca": 3.0, "ccs": 2.0, "ccc": 7.0 }, "trk2": { "mou": 27.299999237060547, "ca": 1.0, "ccs": 1.0, "ccc": 6.0 }, "trk3": { "mou": 80.59999752044678, "ca": 4.0, "ccs": 4.0, "ccc": 14.0 }, "trk4": { "mou": 26.716670513153076, "ca": 4.0, "ccs": 4.0, "ccc": 6.0 }}]}


let reqObj={};

let arr = Object.keys(obj);

for(var i=0;i<=arr.length-1;i++){

 let inObj = obj[arr[i]][0];

 reqObj[arr[i]] = Object.keys(inObj).reduce((acc,ele,index)=>{

     let keyArr = Object.keys(inObj[ele]);

     for(var j=0;j<=keyArr.length-1;j++){

       acc = {...acc,...{[keyArr[j]] : (keyArr[j] in acc)   ? acc[keyArr[j]] + inObj[ele][keyArr[j]]   : inObj[ele][keyArr[j]]}}

     }

     return acc;

  },{})

}

  console.log(reqObj)


查看完整回答
反对 回复 2022-09-02
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信