javascript - 重新排列 JSON 数据以将 id 添加到嵌套对象

标签 javascript json

我正在尝试重新排列传入的 JSON 对象以在 React 组件中使用。

我收到的 JSON 对象是 jsonData & 这就是我当前的代码:

const jsonData = {
  "Jonas": {
    "position": "CTO",
    "employees": [{
      "Sophie": {
        "position": "VP Engineering",
        "employees": [{
            "Nick": {
              "position": "Team Lead",
              "employees": [{
                  "Pete": {
                    "position": "Backend Engineer",
                    "employees": []
                  }
                },
                {
                  "Barbara": {
                    "position": "Fronted Engineer",
                    "employees": []
                  }
                }
              ]
            }
          },
          {
            "Melissa": {
              "position": "Product Manager",
              "employees": []
            }
          }
        ]
      }
    }]
  }
}

const userList = [jsonData]

const formatData = list =>
  list.map(item => {
    let name, position, employees
    for (let key in item) {
      name = key
      position = item[key].position
      employees = item[key].employees ? item[key].employees : []
    }

    return {
      name,
      position,
      employees: employees ? formatData(employees) : employees
    }
  })

console.log(formatData(userList))

我正在尝试向每个对象添加新的 id 并将 jsonData 转换为数组。我正在获取输出,但无法添加 id,如下所示 -

[
  {
    "id": 0,
    "name": "Jonas",
    "position": "CTO",
    "employees": [
      {
        "id": 1,
        "name": "Sophie",
        "position": "VP Engineering",
        "employees": [
          {
            "id": 2,
            "name": "Nick",
            "position": "Team Lead",
            "employees": [
              {
                "id": 3,
                "name": "Pete",
                "position": "Backend Engineer",
                "employees": []
              },
              {
                "id": 4,
                "name": "Barbara",
                "position": "Fronted Engineer",
                "employees": []
              }
            ]
          },
          {
            "id": 5,
            "name": "Melissa",
            "position": "Product Manager",
            "employees": []
          }
        ]
      }
    ]
  }
]

如何向输出的每个对象添加 id

最佳答案

您可以使用Object.assignid 计数器上有一个闭包。

function convert(object) {
    const fn = o => (name => Object.assign(
        { id: id++, name },
        o[name],
        { employees: o[name].employees.map(fn)
    }))(Object.keys(o)[0]);

    var id = 0;
    return fn(object);
}

var data = { Jonas: { position: "CTO", employees: [{ Sophie: { position: "VP Engineering", employees: [{ Nick: { position: "Team Lead", employees: [{ Pete: { position: "Backend Engineer", employees: [] } }, { Barbara: { position: "Fronted Engineer", employees: [] } }] } }, { Melissa: { position: "Product Manager", employees: [] } }] } }] } },
    result = convert(data);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 重新排列 JSON 数据以将 id 添加到嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570232/

相关文章:

javascript - 按降序排列数字,不带 0

java - Spring RequestBody需要加载嵌套的Object

javascript - 将一个数组复制到另一个数组时出现问题

json - Slickgrid - 具有复杂对象的列定义

javascript - 根据if条件选择ajax url

javascript - 使用 JQuery 定义要追加的 HTML 模板

javascript - Vuetify slider : Change mouse cursor to pointer on hover and click

javascript - 通过数据过滤器过滤折叠 div 并突出显示当前链接

JavaScript 字符串连接不起作用

javascript - 在 JavaScript 中使用 JSON 将数组存储在 localStorage 中