我正在尝试重新排列传入的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
添加到输出的每个对象?
发布于 2018-09-30 00:38:00
您可以在id
的计数器上使用带有闭包的Object.assign
。
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; }
发布于 2018-09-30 00:25:56
只需在循环中添加一个变量id
并递增即可。
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]
var id=-1;
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 : []
}
id=id+1;
return {
id,
name,
position,
employees: employees ? formatData(employees) : employees
}
})
console.log(formatData(userList))
发布于 2018-09-30 01:10:39
我认为这个方法更好,如果添加更多的话解决更多的嵌套员工数组
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 newFormat = list => {
findChildAndAddId(list, 0, list.length)
return list
}
const findChildAndAddId = (item, count, parentNumber) => {
if (item && Array.isArray(item)) {
item.map((value, index) => {
findChildAndAddId(value, count + index, item.length)
})
} else if (item) {
Object.keys(item).map(key => {
let value = item[key]
item.id = count
item.name = key
if (value.position) {
item.position = value.position
}
if (value.employees) {
item.employees = value.employees
}
delete item[key]
if (item.employees) {
findChildAndAddId(item.employees, count + parentNumber)
}
})
}
}
console.log(newFormat(userList))
https://stackoverflow.com/questions/52570232
复制相似问题