通过键将格式化的json对象转换为对象数组,并在每个级别上求和

问题描述 投票:0回答:2

具有以下树json对象:

{
  "Season1": {
    "Title1": {
      "a1": {
        "val1": "100",
        "val2": "200",
        "val3": "300"
      },
      "a2": {
        "val1": "100",
        "val2": "200",
        "val3": "300"
      }
    },
    "Title2": {
      "c1": {
        "val1": "100",
        "val2": "200",
        "val3": "300"
      },
      "d2": {
        "val1": "100",
        "val2": "200",
        "val3": "300"
      }
    }
  }
}

试图使用以下功能格式化json:

function Format(obj){
    return Object.entries(obj).flatMap(([key, val]) => {
        let o = { name: key}
        if(Object.keys(val).some(function(k) {return typeof val[k] === 'object'})){
            o['_children'] = Format(val)
        } else {
            Object.keys(val).map(function(a){
                o[a] = val[a]
            })
        }
        return [o]
    })
}

这将通过键返回嵌套对象的数组:

[
  {
    "name": "Season1",
    "_children": [
      {
        "name": "Title1",
        "_children": [
          {
            "name": "a1",
            "val1": "100",
            "val2": "200",
            "val3": "300"
          },
          {
            "name": "a2",
            "val1": "100",
            "val2": "200",
            "val3": "300"
          }
        ]
      },
      {
        "name": "Title2",
        "_children": [
          {
            "name": "c1",
            "val1": "100",
            "val2": "200",
            "val3": "300"
          },
          {
            "name": "d2",
            "val1": "100",
            "val2": "200",
            "val3": "300"
          }
        ]
      }
    ]
  }
]

挑战是在每个父级中计算底层键的小计,分别为val1,val2,val3,例如。因此,“ Title1”,“ Title2”和“ Season1”在将输出填充到表中之后可以填充空白的小计单元格。预期的输出应如下所示:[ { "name": "Season1", "_children": [ { "name": "Title1", "_children": [ { "name": "a1", "val1": "100", "val2": "200", "val3": "300", }, { "name": "a2", "val1": "100", "val2": "200", "val3": "300", } ], "val1": 200, "val2": 400, "val3": 600 }, { "name": "Title2", "_children": [ { "name": "c1", "val1": "100", "val2": "200", "val3": "300", }, { "name": "d2", "val1": "100", "val2": "200", "val3": "300", } ], "val1": 400, "val2": 400, "val3": 600 } ], "val1": 600, "val2": 800, "val3": 1200 } ]

如何为此目的更新格式功能?有人可以分享任何想法或解决方案吗?谢谢!

具有以下树json对象:{“ Season1”:{“ Title1”:{“ a1”:{“ val1”:“ 100”,“ val2”:“ 200”,“ val3”:“ 300”}}, “ a2”:{“ val1”:“ 100”,...

javascript node.js
2个回答
0
投票
您可以更新所有级别,但最嵌套的级别除外。

0
投票
您还可以如下编辑递归函数。我在递归的每个级别上累加和,并将其传递给调用堆栈
© www.soinside.com 2019 - 2024. All rights reserved.