Javascript - deepEqual Vergleich

Frage (Von Eloquent Javascript, 2. Auflage, Kapitel 4, Übung 4):

Schreiben Sie eine Funktion, deepEqual, das dauert zwei Werten und gibt true nur, wenn Sie
sind den gleichen Wert oder sind Objekte mit gleichen Eigenschaften, deren Werte auch
gleich, wenn im Vergleich mit einem rekursiven Aufruf deepEqual.

Testfälle:

var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, obj));
//→ true
console.log(deepEqual(obj, {here: 1, object: 2}));
//→ false
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
//→ true

Mein code:

var deepEqual = function (x, y) {
  if ((typeof x == "object" && x != null) && (typeof y == "object" && y != null)) {
    if (Object.keys(x).length != Object.keys(y).length)
      return false;
    for (var prop in x) {
      if (y.hasOwnProperty(prop))
        return deepEqual(x[prop], y[prop]);
    /*This is most likely where my error is. The question states that all the values
    should be checked via recursion; however, with the current setup, only the first
    set of properties will be checked. It passes the test cases, but I would like
    to solve the problem correctly!*/
      }
    }
  else if (x !== y)
    return false;
  else
    return true;
}

Ich glaube, ich habe die Allgemeine Idee, nach unten; aber, wie ich bereits im Kommentar, das Programm wird nicht auf der zweiten Eigenschaft der Objekte. Ich fühle mich wie ich haben eine Struktur - /Logik-problem und ich bin einfach mit Rekursion in die falsche Richtung, als ich ursprünglich gedacht, um eine Schleife durch die Eigenschaften, die Verwendung der Rekursion zum Vergleich der Werte der ersten Eigenschaft, dann weiter in der Schleife die next-Eigenschaft und vergleichen Sie erneut. Obwohl, ich bin mir nicht sicher, ob das überhaupt möglich ist?

Ich habe eine gute Menge von Gedanken und versucht, ein paar verschiedene Ansätze, aber das war die richtige Antwort, ich habe es so weit. Alle möglichen Tipps, um mich in die richtige Richtung?

Schreibe einen Kommentar