Javascript - deepEqual Vergleich

7

Frage (Aus Eloquent Javascript 2nd Edition, Kapitel 4, Übung 4):

  

Schreiben Sie eine Funktion, deepEqual, die zwei Werte akzeptiert und nur dann true zurückgibt, wenn sie sie enthält       sind der gleiche Wert oder sind Objekte mit den gleichen Eigenschaften, deren Werte auch sind       gleich im Vergleich zu einem rekursiven Aufruf von deepEqual.

Testfälle:

%Vor%

Mein Code:

%Vor%

Ich denke, ich habe die allgemeine Idee unten; Wie ich jedoch im Kommentar gesagt habe, wird das Programm die zweite Eigenschaft in den Objekten nicht überprüfen. Ich habe das Gefühl, ein strukturelles / logisches Problem zu haben und verwende Rekursion einfach auf die falsche Weise, da ich ursprünglich die Eigenschaften durchlaufen wollte, Rekursion verwende, um die Werte der ersten Eigenschaft zu vergleichen und dann in der Schleife zur nächsten weiterzumachen Eigenschaft und erneut vergleichen. Obwohl, ich bin mir nicht sicher, ob das überhaupt möglich ist?

Ich habe viel darüber nachgedacht und ein paar verschiedene Ansätze versucht, aber das war die richtigste Antwort, auf die ich bisher gekommen bin. Irgendwelche Tipps, um mich in die richtige Richtung zu weisen?

    
Gavin Feriancek 22.08.2014, 21:49
quelle

5 Antworten

18

Wie Sie vermuten, geben Sie das Spiel der ersten angezeigten Eigenschaft zurück. Sie sollten false zurückgeben, wenn diese Eigenschaft nicht übereinstimmt, aber suchen Sie weiter.

Geben Sie auch false zurück, wenn keine prop -Eigenschaft in y gefunden wurde (dh die Anzahl stimmt überein, aber nicht die tatsächlichen Eigenschaften).

Wenn alle Eigenschaften übereinstimmen, geben Sie true :

zurück %Vor%

%Vor%
    
Paul Roub 22.08.2014, 21:59
quelle
2

Sie können eine Variable außerhalb der for-Schleife verwenden, um den Vergleich zu verfolgen:

%Vor%

Das vorherige Beispiel ist nicht absichtlich optimiert. Da Sie Objekte vergleichen, wissen Sie, dass Sie return false verwenden können, sobald Sie eine Ungleichheit finden, und Sie können die Schleife fortsetzen, während alle zuvor überprüften Eigenschaften gleich sind:

%Vor%     
Volune 22.08.2014 21:59
quelle
2

Ich bin ziemlich neu in JS, aber so habe ich es gelöst:

%Vor%

Und hier sind meine Tests:

%Vor%     
Teodor Dimitrov 23.06.2017 14:54
quelle
2

Fühle, dass diese Version etwas lesbarer ist (leichter zu verstehen). Die Logik ist der Top-Antwort sehr ähnlich. (ES6 diesmal)

%Vor%

Übrigens gibt es eine Cheater-Version von deep equal, die wie ein Zauber wirkt)) Allerdings ist es ungefähr 1,6 mal langsamer.

%Vor%     
quelle
0

Ich bin gerade durch dieses Kapitel gegangen und wollte auch meine Arbeit zeigen.

Der Fehler in mir (lass es mich wissen, wenn es mehr gibt) ist, dass die Objekteigenschaften auch in der richtigen Reihenfolge sein müssen. Ich bevorzuge die Lösung von @paul und @ danni.

%Vor% %Vor% %Vor%
    
Yavin4 08.02.2018 06:14
quelle

Tags und Links