JSFiddle - React, Tailwind, and code Playground

by Luiz Silva

HTML

<textarea></textarea>

JavaScript

objTeste = [
  {
    "id": "03",
    "nome": "teste03",
    "pai": {
      "id": "02",
      "nome": "teste02",
      "pai": {
        "id": "01",
        "nome": "teste01"
      }
    }
  },
  {
    "id": "02",
    "nome": "teste02",
    "pai": {
      "id": "01",
      "nome": "teste01"
    }
  },
  {
    "id": "01",
    "nome": "teste01"
  },
  {
    "id": "04",
    "nome": "teste04"
  }
];

function normalizar(vetor) {
    //construir um mapa com elementos que são pai 
    var mapa = {};
    function indexarItem(item) {
        if ('pai' in item) {
            mapa[item['pai']['id']] = item['id'];
            indexarItem(item['pai']);
        }
    }
    vetor.forEach(indexarItem);
    //remover elementos do vetor que sejam pai
    function naoEhPai(item) {
    		return !(item['id'] in mapa);
    }
    return vetor.filter(naoEhPai);
}

//exibe resultado
var resultado = normalizar(objTeste);
document.querySelector('textarea').value = JSON.stringify(resultado, null, '\t');