Frank S.: Länge eines JSON Objekts in 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

  1. 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

    --
    RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine ganz wunderbar. (...)
    1. Super, vielen Dank für die schnelle Hilfe. Die Funktion ist genau das, was ich gebraucht hab! :-)

      1. 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

        --
        RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine ganz wunderbar. (...)
    2. 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

  2. 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

  3. 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