gpt4 book ai didi

javascript - 将具有父/子关系的对象数组转换为嵌套对象数组

转载 作者:行者123 更新时间:2023-12-03 01:00:04 25 4
gpt4 key购买 nike

我在将一个对象数组转换为另一个嵌套对象数组时遇到问题。如何将 table 转换为下面示例代码中的 transformedTable

输入数据:

const table = [
{id: 1, isMain: null, parentId: null, name:"john"},
{id: 2, isMain: true, parentId: null, name:"sam"},
{id: 3, isMain: null, parentId: 2, name:"samantha"},
{id: 4, isMain: true, parentId: null, name:"kate"},
{id: 5, isMain: true, parentId: 4, name:"jonathan"},
{id: 6, isMain: null, parentId: 4, name:"walter"},
{id: 7, isMain: null, parentId: 5, name:"clara"}
]

我想将上面的数据转换为这样的:

transformedTable = [{
id: 1,
isMain: null,
parentId: null,
name: "john"
},
{
id: 2,
isMain: true,
parentId: null,
name: "sam",
kids: [{
id: 3,
isMain: null,
parentId: 2,
name: "samantha"
}]
},
{
id: 4,
isMain: true,
parentId: null,
name: "kate",
kids: [{
id: 5,
isMain: true,
parentId: 4,
name: "jonathan",
kids: [{
id: 7,
isMain: null,
parentId: 5,
name: "clara"
}]
},
{
id: 6,
isMain: null,
parentId: 4,
name: "walter"
},
]
},
]

最佳答案

您可以嵌套几个循环来比较每个对象,并在需要时添加“kids”属性。然后,过滤结果数组以仅留下最终父级(其中包含所有嵌套子级)。请参阅下面的工作片段:

const table = [{ id: 1, isMain: null, parentId: null, name:"john" }, { id: 2, isMain: true, parentId: null, name:"sam" }, { id: 3, isMain: null, parentId: 2, name:"samantha" }, { id: 4, isMain: true, parentId: null, name:"kate" }, { id: 5, isMain: true, parentId: 4, name:"jonathan" }, { id: 6, isMain: null, parentId: 4, name:"walter" }, { id: 7, isMain: null, parentId: 5, name:"clara" }];
const kid = (p, c) => {
if (p.hasOwnProperty('kids')) {
p.kids.push(c);
} else {
p.kids = [c];
}
};

for (let i = 0; i < table.length - 1; i++) {
const a = table[i];
for (let j = i + 1; j < table.length; j++) {
const b = table[j];
if (a.id === b.parentId) {
kid(a, b);
} else if (b.id === a.parentId) {
kid(b, a);
}
}
}

const result = table.filter((x) => !x.parentId);
console.log(result);

关于javascript - 将具有父/子关系的对象数组转换为嵌套对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52665445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com