如何使用 JavaScript 重构 json 对象

sm1l3y

我需要重构一个 API 调用的输出,它返回与此类似的数据:

{
  "Label3":
    [
      { "name": "superman", "power": 8900 },
      { "name": "iron man", "power": 3000 },
      { "name": "spike spiegal", "power": 200 },
      { "name": "doctor strange", "power": 800 }
    ],
  "Label18":
    [
      { "name": "goku", "power": 9000 },
      { "name": "vegeta", "power": 8500 },
      { "name": "pringles can", "power": 1 }
    ],
  "Label37":
    [
      { "name": "dr manhattan", "power": 100000 },
      { "name": "mayonaise", "power": 10 }
    ]
}

我需要它从每个数组中获取最高值,并创建一个名为 maxPower 的新属性,并进行一些重组以返回如下数据:

{
    "groupName": 'Label3',
    "highestPower": 8900,
    "heroes": [
        {"name":"superman","power":8900},
        {"name":"iron man","power":3000},
        {"name":"spike spiegal","power":200},
        {"name":"doctor strange","power":800}
    ],
},
{
    "groupName": 'Label18',
    "highestPower": 9000,
    "heroes": [
        {"name":"goku","power":9000},
        {"name":"vegeta","power":8500},
        {"name":"pringles can","power":1}
    ],
},
{
    "groupName": 'Label37',
    "highestPower": 100000,
    "heroes": [
        {"name":"dr manhattan","power":100000},
        {"name":"mayonaise","power":10}
    ],
}

我正在考虑对每个数组执行 forEach 并获取第二个索引并设置为变量并进行比较,只是不确定如何通过数据重组来实现这一点。

哈伦·耶尔马兹

您可以使用Object.keys()迭代标签并Array.reduce获得最高功率,如下所示:

var labels = {
  "Label3":
    [
      { "name": "superman", "power": 8900 },
      { "name": "iron man", "power": 3000 },
      { "name": "spike spiegal", "power": 200 },
      { "name": "doctor strange", "power": 800 }
    ],
  "Label18":
    [
      { "name": "goku", "power": 9000 },
      { "name": "vegeta", "power": 8500 },
      { "name": "pringles can", "power": 1 }
    ],
  "Label37":
    [
      { "name": "dr manhattan", "power": 100000 },
      { "name": "mayonaise", "power": 10 }
    ]
}

var groupedLabels = Object.keys(labels).map((key) => {
  return {
    groupName: key,
    highestPower: labels[key].reduce(( acc, cur ) => Math.max( acc, cur.power ), 0),
    heroes: labels[key]
  }
});

console.log(groupedLabels);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章