Recursão: Os objetos são iguais?

Crie uma função que verifique recursivamente se cada elemento do primeiro objeto é semelhante ao do segundo objeto (ou seja, tipo, valor, índice, chave etc.); retorne true se for e false caso contrário.

Os objetos mencionados neste desafio são instâncias de Array, Map ou Object. O elemento de um objeto pode ser outro objeto dentro de outro objeto e assim por diante. Embora este desafio possa parecer enganosamente fácil com JSON.stringify, a humilde intenção do autor é que o conceito de recursão seja aplicado.

Exemplos

isSimilar(["cars", "trains", ["roads", ["railways"]]], ["cars", "trains", ["roads", ["railways"]]]) ➞ true

isSimilar({"pairs": [[3, 5], [1, 7], [2, 6], [0, 8]]}, {"pairs": [[3, 5], [1, 1], [2, 6], [0, 8]]}) ➞ false

isSimilar({"Sam": 4, "Elliot": 4, "equality": true}, {"Sam": 4, "Elliot": 5, "equality": false}) ➞ false

isSimilar([{"D": [0, 3]}, {"X": [1, 3]}, {"D": [3, 7]}], [{"D": [0, 3]}, {"X": [1, 3]}, {"D": [3, 7]}]) ➞ true

Observações

  • Você pode ler sobre mais tópicos relacionados à recursão (consulte a aba Recursos) se ainda não estiver familiarizado com ela ou se ainda não tiver entendido completamente o conceito antes de tentar este desafio.
  • Se você acha recursão divertida, pode encontrar uma coleção desses desafios aqui.