Länge eines JSON Objekts in Javascript
Frank S.
- javascript
Hallo zusammen,
Ich nutze das Prototype Framework, um mittels eines PHP Skripts einen JSON String an mein Javascript zu übergeben.
Teile dieses Strings sind eigentlich Arrays, zu denen ich die Länge ermitteln möchte. Wie kann ich das am einfachsten machen?
Das Objekt sieht beispielsweise so aus:
test: Object
1: "11"
2: "9"
Leider kann ich hier nicht so einfach .length anwenden wie bei Arrays.
Gruß,
Frank
Leider geht das nur, indem Du das Objekt einmal durchgehst, etwa wie in der folgenden Funktion:
function objlen(obj) {
var result = 0;
for (var key in obj) {
// hasOwnProperty ist true, wenn die Eigenschaft nicht prototypisch, sondern objektimmanent ist, andernfalls false;
// an dieser Stelle machen wir uns zunutze, dass bei der Umwandlung zu Number aus true 1 und aus false 0 wird:
result += obj.hasOwnProperty(key);
}
return result;
}
Gruß, LX
Super, vielen Dank für die schnelle Hilfe. Die Funktion ist genau das, was ich gebraucht hab! :-)
Achtung: falls befürchtet werden muss, dass das Objekt eine nicht prototypische Eigenschaft namens hasOwnProperty bekommt, musst Du statt "obj.hasOwnProperty(key)" eben "Object.prototype.hasOwnProperty.call(obj, key)" verwenden um Fehler zu vermeiden.
Nur so am Rande, weil mich gerade jemand aus der 140byt.es-Community bei einer ähnlichen Funktion darauf aufmerksam gemacht hatte: https://gist.github.com/1034464.
Gruß, LX
Leider geht das nur, indem Du das Objekt einmal durchgehst
Dafür kennt ECMAScript 5:
Object.keys(o).length
Vgl. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
Mathias
Hi,
Teile dieses Strings sind eigentlich Arrays [...]
Warum machst du aus den eigentlichen Arrays nicht auch uneigentliche Arrays?
z.B.
var obj = {
test : { },
myarray : [ 11, 9 ]
};
var arraylength = obj.myarray.length;
Bis die Tage,
Matti
Teile dieses Strings sind eigentlich Arrays, zu denen ich die Länge ermitteln möchte. Wie kann ich das am einfachsten machen?
Das Objekt sieht beispielsweise so aus:
test: Object
1: "11"
2: "9"
Soll bei deiner Längenberechnung nun 2 herauskommen, weil zwei numerische Eigenschaften existieren, oder 3, weil das Objekt insgesamt drei Eigenschaften besitzt?
Mathias