Wie kann ich überprüfen, dass zwei Objekte denselben Eigenschaftsnamen haben?
Ich bin mit Knoten, mocha und chai für meine Anwendung. Ich möchte testen, ob meine Ergebnisse die data-Eigenschaft ist der gleiche "Typ des Objekts" als eines meiner model-Objekte. (Sehr ähnlich zu dem von chai ' s instanceof). Ich will einfach nur, um zu bestätigen, dass die beiden Objekte haben die gleichen Sätze mit den Namen der Eigenschaften. Ich bin zwar nicht daran interessiert, die tatsächlichen Werte der Eigenschaften.
Können sagen, ich habe das Modell Mensch wie unten. Ich möchte überprüfen, ob meine Ergebnisse.alle Daten die gleichen Eigenschaften wie das erwartete Modell funktioniert. Also in diesem Fall, die Person, die die hat eine firstName und lastName.
Also, wenn results.data.lastName
und results.data.firstName
beide existieren, dann sollte es wieder wahr. Wenn man entweder nicht vorhanden ist, sollte es false zurück. Ein bonus wäre es, wenn die Ergebnisse.Daten hat zusätzliche Eigenschaften wie Ergebnisse.Daten.Familienname, dann würde es wieder falsch, weil Nachname nicht vorhanden in Person.
Modell
function Person(data) {
var self = this;
self.firstName = "unknown";
self.lastName = "unknown";
if (typeof data != "undefined") {
self.firstName = data.firstName;
self.lastName = data.lastName;
}
}
InformationsquelleAutor der Frage dan27 | 2013-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie serialisieren, einfache Daten, um zu überprüfen für die Gleichstellung:
Dies wird Ihnen etwas wie
Als Funktion...
BEARBEITEN
Wenn Sie chai, wie Sie sagen, überprüfen Sie heraus http://chaijs.com/api/bdd/#equal-section
EDIT 2
Wenn Sie nur wollen, um zu überprüfen, Schlüssel...
sollte es tun.
InformationsquelleAutor der Antwort Casey Foster
Hier eine kurze ES6 variadic version:
Etwas performance-test (MacBook Pro 2,8 GHz Intel Core i7, Knoten 5.5.0):
Ergebnisse:
InformationsquelleAutor der Antwort schirrmacher
Wenn Sie möchten, um zu überprüfen, ob beide Objekte die gleichen Eigenschaften haben Namen, können Sie dies tun:
In dieser Weise sind Sie sicher, zu überprüfen, nur durchsuchbar und zugänglich-Eigenschaften beider Objekte.
BEARBEITEN - 2013.04.26:
Vorherigen Funktion geschrieben werden kann in der folgenden Weise:
Auf diese Weise überprüfen wir, dass beide Objekte haben die gleiche Anzahl von Eigenschaften (sonst werden die Objekte nicht die gleichen Eigenschaften haben, und wir müssen ein logisches false) dann, wenn die Zahl übereinstimmt, die wir gehen, um zu überprüfen, ob Sie die gleichen Eigenschaften haben.
Bonus
Eine mögliche Verbesserung könnte sich vorstellen, auch eine Art Prüfung zu erzwingen, die passen auf jedes Grundstück.
InformationsquelleAutor der Antwort Ragnarokkr
Wenn Sie möchten umfassende Validierung wie @speculees, hier ist eine Antwort, die die Verwendung
deep-keys
(Offenlegung: ich bin eine Art Verwalter dieses kleine Paket)oder mit
chai
:InformationsquelleAutor der Antwort Philip Garrison
Hier ist mein Versuch zur Validierung von JSON-Eigenschaften. Ich benutzte @casey-foster 's Ansatz, aber Hinzugefügt, die Rekursion für tiefere überprüfung. Der Dritte parameter in der Funktion ist optional und nur für die Tests verwendet.
InformationsquelleAutor der Antwort speculees
Wenn Sie underscoreJs, dann können Sie einfach verwenden _.isEqual-Funktion
und es vergleicht alle Schlüssel und Werte auf jeder Ebene der Hierarchie wie unter Beispiel.
Wenn alle Schlüssel und Werte für diesen Schlüssel sind die gleichen in beiden die Objekte, dann wird true zurückgegeben, sonst false zurück.
InformationsquelleAutor der Antwort Mahima Agrawal