Reputation: 13
I have object like this:
let tree = {
name: "item3",
parent: {
name: "item2",
parent: {
name: "item1"
}
}
}
I need reverse child and parent items. How I can transform it to object like this?
let tree = {
name: "item1",
parent: {
name: "item2",
parent: {
name: "item3"
}
}
}
Upvotes: 1
Views: 190
Reputation: 673
let tree = {
name: "item3",
parent: {
name: "item2",
parent: {
name: "item1"
}
}
}
function reverse(tr) {
let rev = {};
for (let i = tr; i; i = i.parent) {
if (rev.name) {
rev.parent = JSON.parse(JSON.stringify(rev));
}
rev.name = i.name;
}
return rev;
}
console.log(reverse(tree));
Upvotes: 1
Reputation: 191976
You can use recursion to achieve the result:
const fn = (current, parent) => {
const { parent: prevParent, ...rest } = current;
const item = parent ? { ...rest, parent } : rest;
if(prevParent) return fn(prevParent, item);
return item;
}
const tree = {
name: "item4",
parent: {
name: "item3",
parent: {
name: "item2",
parent: {
name: "item1"
}
}
}
};
const result = fn(tree);
console.log(result);
Upvotes: 2