Die Ausgabe meines JSON-Aufrufs kann entweder ein Array oder ein Hash sein. Wie unterscheide ich zwischen diesen beiden?In Javascript, wie können wir identifizieren, ob ein Objekt ein Hash oder ein Array ist?
Antwort
Moderne Browser unterstützen die Array.isArray(obj)
Methode.
See MDN für die Dokumentation und eine Polyfill.
= ursprüngliche Antwort von 2008 =
können Sie die Konstruktor Eigenschaft Ihrer Ausgabe verwenden:
if(output.constructor == Array){
}
else if(output.constructor == Object){
}
Ist Objekt:
function isObject (obj) {
return obj && (typeof obj === "object");
}
Array:
function isArray (obj) {
return isObject(obj) && (obj instanceof Array);
}
Da Arrays sind Objekte, die Sie testen wollen, werden, wenn eine Variable ein Array erste ist, und dann, wenn es eine Aufgabe:
if (isArray(myObject)) {
// do stuff for arrays
}
else if (isObject(myObject)) {
// do stuff for objects
}
Gute Antwort. Vielleicht möchten Sie hinzufügen, dass jedes js-Objekt als Hash behandelt werden kann. – Rontologist
isObject (new Date())) ist wahr, aber ein Datum ist kein Objekt/Hash im Sinne dieser Frage. Natürlich wenden wir es nur auf JSON an, aber der Methodenname ist dann wirklich verwirrend. – schirrmacher
prüfen "Konstruktor" Eigenschaft auf dem Objekt. Es ist Array - es ist ein Array-Objekt.
Meinten Sie "Objekt" statt "Hash"?
>>> var a = [];
>>> var o = {};
>>> a instanceof Array
true
>>> o instanceof Array
false
Ich habe eine Funktion zur Bestimmung, ob es ein Wörterbuch ist.
exports.is_dictionary = function (obj) {
if(!obj) return false;
if(Array.isArray(obj)) return false;
if(obj.constructor != Object) return false;
return true;
};
// return true
test.equal(nsa_utils.is_dictionary({}), true);
test.equal(nsa_utils.is_dictionary({abc:123, def:456}), true);
// returns false
test.equal(nsa_utils.is_dictionary([]), false);
test.equal(nsa_utils.is_dictionary([123, 456]), false);
test.equal(nsa_utils.is_dictionary(null), false);
test.equal(nsa_utils.is_dictionary(NaN), false);
test.equal(nsa_utils.is_dictionary('hello'), false);
test.equal(nsa_utils.is_dictionary(0), false);
test.equal(nsa_utils.is_dictionary(123), false);
Danke dafür. Es hat für die oben genannten Fälle funktioniert. Ich muss noch auf einen Fall stoßen, bei dem Ihre Methode fehlschlägt. – Nav
Für json Parsen kommen könnte praktisch :)
isArrayHashs = (attr) ->
!!attr && attr.constructor == Array && isHash(attr[0])
isHash = (attr) ->
!!attr && !$.isNumeric(attr) && attr.constructor == Object
attr [0] .constructor muss sein:
- String
- Numerische
- Array
- Objekt
- Undefiniert
- 1. Können wir ein Objekt in JavaScript in ein Cookie einbinden?
- 2. Wie können wir ein Objekt jederzeit laden?
- 3. prüfen, ob ein Objekt ist Array-artige
- 4. Wann ein Objekt oder ein Array in Javascript verwenden?
- 5. Feststellen, ob ein JavaScript-Objekt ein „Komplex“ Objekt ist oder nur eine Zeichenfolge
- 6. Wie kann ich feststellen, ob ein JavaScript-Objekt ein Bild oder ein Canvas ist?
- 7. Wie kann man überprüfen, ob ein Objekt ein Array
- 8. Prüfen, ob ein Objekt ist
- 9. Javascript: Ist Objekt ein Array von Elementen
- 10. Wie überprüft man, ob ein Objekt kein Array ist?
- 11. Wie ein JSON-Objekt Zeichenfolge in ein Javascript-Array
- 12. Identifizieren, ob ein Zertifikat der- oder 64 codiert ist
- 13. Was ist der beste Weg zu überprüfen, ob ein Objekt ein Array ist oder nicht in Javascript?
- 14. Wie überprüfe ich, ob ein Objekt ein Byte-Array enthält?
- 15. Wie testen, ob ein Objekt ein Proxy ist?
- 16. Können wir sagen, dass ein Router ein Netzwerk ist?
- 17. Ein Hash :: kombinieren Array
- 18. Wie erstellt man ein Hash-Objekt/Array mit jquery?
- 19. Wie übersetze ich ein JavaScript-Objekt in ein neues Objekt?
- 20. Was benötigt weniger Speicher: ein Javascript-Array oder Javascript-Objekt?
- 21. Ändern Sie ein Objekt in ein neues Array in Javascript
- 22. Wie konvertiere ich ein Javascript-Objekt-Array in ein String-Array des gewünschten Objekt-Attributs?
- 23. Prüfung, ob das Element ein Array ist, in Javascript
- 24. So erkennen Sie, ob ein Typ eine Liste oder ein Array oder IEnumerable ist oder
- 25. Wie überprüfen, ob es ein Array oder ein Objekt in jq gibt?
- 26. JavaScript-Objekt geschoben in ein Array
- 27. In Javascript ein Wörterbuch Verständnis oder ein Objekt `map`
- 28. Testen, ob ein Objekt ein Dictionary in C ist
- 29. Überprüfen, ob ein Array ein bestimmtes Objekt (iOS) enthält
- 30. überprüfen Sie, ob ein Array ein angegebenes Objekt
Dies hat das Potenzial von Konflikten zwischen verschiedenen Seiten, da beide unterschiedliche Instanzen der Konstruktoren "Array" und "Object" haben, die nicht als gleichwertig verglichen werden. Ich bin mir nicht ganz sicher, wie ich ein Beispiel erstellen soll, das dies demonstriert, aber ich habe es irgendwo gelesen. – ripper234
@ ripper234 Das Problem manifestiert sich in einer Multifensterumgebung. – alex
+1 für metioning Array.isArray. Überprüfen Sie diesen Link für borwser Unterstützung: http://kangax.github.io/compat-table/es5/#Array.isArray – SKuijers