Länge eines JavaScript-Objekts

29 answers
  • Die robusteste Antwort (dh, die die Absicht von dem erfasst, was Sie versuchen, während die wenigsten Fehler verursacht werden) wäre:

     Object.size = function(obj) {
        var size = 0, key;
        for (key in obj) {
            if (obj.hasOwnProperty(key)) size++;
        }
        return size;
    };
    
    // Get the size of an object
    var size = Object.size(myArray);
     

    In JavaScript gibt es eine Art Konvention, die Sie nicht beachten fügen Sie Dinge zu Object.prototype hinzu , da dies zu Aufzählungen in verschiedenen Bibliotheken führen kann. Das Hinzufügen von Methoden zu Object ist jedoch normalerweise sicher.


    Hier ist ein Update von 2016 und weit verbreitete Bereitstellung von ES5 und darüber hinaus. Für IE9 + und alle anderen modernen ES5 + -fähigen Browser können Sie Object.keys() Der obige Code wird also zu:

     var size = Object.keys(myObj).length;
     

    Dies muss keinen bestehenden Prototyp ändern, da Object.keys() ist jetzt eingebaut.

    Bearbeiten : Objekte können symbolische Eigenschaften haben, die nicht über die Object.key-Methode zurückgegeben werden können. Die Antwort wäre also unvollständig, ohne sie zu erwähnen.

    Der Sprache wurde Symboltyp hinzugefügt, um eindeutige Bezeichner für Objekteigenschaften zu erstellen. Der Hauptvorteil des Symboltyps ist das Verhindern des Überschreibens.

    Object.keys oder Object.getOwnPropertyNames funktionieren nicht für symbolische Eigenschaften. Um sie zurückzugeben, müssen Sie Object.getOwnPropertySymbols verwenden.

     var person = {
      [Symbol('name')]: 'John Doe',
      [Symbol('age')]: 33,
      "occupation": "Programmer"
    };
    
    const propOwn = Object.getOwnPropertyNames(person);
    console.log(propOwn.length); // 1
    
    let propSymb = Object.getOwnPropertySymbols(person);
    console.log(propSymb.length); // 2
     
    16 May 2018
    SnnSnn
  • Wenn Sie wissen, dass Sie sich nicht um hasOwnProperty -Kontrollen kümmern müssen, können Sie dies ganz einfach tun:

     Object.keys(myArray).length
     
    21 June 2017
    Jarod Moseraeosynth
  • Aktualisiert : Wenn Sie Underscore.js verwenden (empfohlen, ist es leicht! ), dann können Sie einfach

     _.size({one : 1, two : 2, three : 3});
    => 3
     

    Wenn nicht , und Sie ' Wenn Sie sich aus irgendeinem Grund mit den Objekteigenschaften auseinandersetzen wollen und bereits mit jQuery arbeiten, ist ein Plugin gleichermaßen zugänglich:

     $.assocArraySize = function(obj) {
        // http://stackoverflow.com/a/6700/11236
        var size = 0, key;
        for (key in obj) {
            if (obj.hasOwnProperty(key)) size++;
        }
        return size;
    };
     
    08 July 2012
    ripper234
  • Verwenden Sie etwas so einfaches:

     Object.keys(obj).length
     

    Es muss nicht schwierig sein auf jeden Fall ist keine weitere Funktion erforderlich.

    17 September 2016
    Peter Mortensen
  • Hier ist die Lösung mit den meisten Browsern.

    Dies ist besser als die akzeptierte Antwort, da native Object.keys verwendet werden, sofern vorhanden. ist der schnellste für alle modernen Browser.

     if (!Object.keys) {
        Object.keys = function (obj) {
            var arr = [],
                key;
            for (key in obj) {
                if (obj.hasOwnProperty(key)) {
                    arr.push(key);
                }
            }
            return arr;
        };
    }
    
    Object.keys(obj).length;
     
    01 September 2013
    Joon
  • Ich bin kein JavaScript-Experte, aber anscheinend müssten Sie die Elemente durchlaufen und zählen, da Object keine Längenmethode hat:

     var element_count = 0;
    for (e in myArray) {  if (myArray.hasOwnProperty(e)) element_count++; }
     

    @palmsey: In der Fairness zum OP wird in der JavaScript-Dokumentation explizit auf die Verwendung von Variablen des Typs Object auf diese Weise explizit als "assoziative Arrays" verwiesen.

    17 September 2016
    Peter Mortensen
  • Diese Methode ruft alle Eigenschaftsnamen Ihres Objekts in einem Array ab, sodass Sie die Länge dieses Arrays ermitteln können, die der Länge des Schlüssels Ihres Objekts entspricht.

     Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2
     
    06 February 2015
    Patrick Robertsvenkat7668
  • Um sich nicht mit dem Prototyp oder anderem Code zu beschäftigen, können Sie Ihr eigenes Objekt erstellen und erweitern:

     function Hash(){
        var length=0;
        this.add = function(key, val){
             if(this[key] == undefined)
             {
               length++;
             }
             this[key]=val;
        }; 
        this.length = function(){
            return length;
        };
    }
    
    myArray = new Hash();
    myArray.add("lastname", "Simpson");
    myArray.add("age", 21);
    alert(myArray.length()); // will alert 2
     

    Wenn Sie immer die add-Methode verwenden, ist die length-Eigenschaft korrekt. Wenn Sie befürchten, dass Sie oder andere Benutzer die Verwendung vergessen, können Sie auch den Eigenschaftszähler hinzufügen, den die anderen zur Längenmethode gepostet haben.

    Natürlich können Sie das auch tun Überschreiben Sie immer die Methoden. Aber selbst wenn Sie dies tun, wird Ihr Code wahrscheinlich merklich ausfallen, was das Debuggen vereinfacht. ;)

    08 August 2015
    Pangprash.patil
  • Gehen Sie wie folgt vor und vergessen Sie nicht zu überprüfen, dass sich die Eigenschaft nicht in der Prototypkette befindet:

     var element_count = 0;
    for(var e in myArray)
        if(myArray.hasOwnProperty(e))
            element_count++;
     
    24 May 2012
    KevBrian
  • Dies ist eine völlig andere Lösung, die nur in moderneren Browsern (IE9 +, Chrome, Firefox 4+, Opera 11.60+, Safari 5.1 +) funktioniert.

    Siehe jsFiddle

    Richten Sie Ihr Associative Array ein Klasse

     /**
     * @constructor
     */
    AssociativeArray = function () {};
    
    // Make the length property work
    Object.defineProperty(AssociativeArray.prototype, "length", {
        get: function () {
            var count = 0;
            for (var key in this) {
                if (this.hasOwnProperty(key))
                    count++;
            }
            return count;
        }
    });
     

    Nun können Sie diesen Code wie folgt verwenden ...

     var a1 = new AssociativeArray();
    a1["prop1"] = "test";
    a1["prop2"] = 1234;
    a1["prop3"] = "something else";
    alert("Length of array is " + a1.length);
     
    02 August 2013
    Ally