Hur kan vi rekursivt omkartlägga den nästlade arrayen i Javascript?
Letar efter att rekursivt omkartlägga den nästlade arrayen i TypeScript/Javascript. Jag har en array som har föräldra- och barnobjekt och vill klona med en tom array som bara har barn- och parentId-objektnyckel. Till exempel.
[{
id: "abc",
name: "Parent Object",
children: [{
id: "def",
name: "Child 1 Object",
parentId: "abc",
children: [{
id: "ghi",
name: "Child 2 Object",
parentId: "def",
children: [{
id: "jkl",
name: "Child 3 Object",
parentId: "ghi",
}]
}]
}]
}]
Ovanstående array är inbäddad och de har andra nycklar också, men jag har nämnt id, name, parentId, children, och det finns 8 fler nycklar som jag inte har nämnt här på grund av komplexitet. Den bör klonas med endast följande objektnycklar och de övriga nycklarna kommer att raderas i klon-arrayen (användbara nycklar är id, parentId, children). Den bör se ut som nedan.
[{
id: "abc",
children: [{
id: "def",
parentId: "abc",
children: [{
id: "ghi",
parentId: "def",
children: [{
id: "jkl",
parentId: "ghi",
}]
}]
}]
}]
Svar #1
Du kan använda ett rekursivt tillvägagångssätt med map och en for...in-loop för att tilldela egenskaper endast om värdet finns.
const data = [{"id":"abc","name":"Parent Object","children":[{"id":"def","name":"Child 1 Object","parentId":"abc","children":[{"id":"ghi","name":"Child 2 Object","parentId":"def","children":[{"id":"jkl","name":"Child 3 Object","parentId":"ghi"}]}]}]}]
const f = data =>
data.map(({ children, id, parentId }) => {
const props = { parentId, id }, o = {}
for (let p in props) if (props[p]) o[p] = props[p]
if (children) o.children = f(children)
return o
})
console.log(f(data))