Dmitry Zorin
Dmitry Zorin

Reputation: 13

How reorder tree object in React?

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

Answers (2)

bli07
bli07

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

Ori Drori
Ori Drori

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

Related Questions