528 Stimmen

Ist das Objekt leer?

Wie kann man am schnellsten prüfen, ob ein Objekt leer ist oder nicht?

Gibt es einen schnelleren und besseren Weg als diesen?

function count_obj(obj){
    var i = 0;
    for(var key in obj){
        ++i;
    }

    return i;
}

6 Stimmen

Möchten Sie die Eigenschaften zählen (das ist es, was der Code tut) oder nur testen, ob das Objekt leer ist oder nicht (das ist in Ihrer Frage angegeben)?

2 Stimmen

Nur als Empfehlung von Bibliotheken, die dazu in der Lage sind is.js y lodash

0 Stimmen

Für derartige Dienstprogramme empfiehlt es sich, einige Bibliotheken zu verwenden. Sie könnten lodash verwenden und etwas wie _.isEmpty(_.keys(yourObject)) . Und ich glaube, Sie können jetzt diese beiden Methoden einzeln importieren, und nicht die gesamte Lodash-Bibliothek.

7voto

Karma Punkte 2096

Wie schlimm ist das?

function(obj){
    for(var key in obj){
        return false; // not empty
    }

    return true; // empty
}

0 Stimmen

Eigentlich ist das sehr gut - siehe Leistungstest oben...

4voto

Aaron Punkte 41

Eine Bibliothek ist nicht erforderlich.

function(){ //must be within a function
 var obj = {}; //the object to test

 for(var isNotEmpty in obj) //will loop through once if there is a property of some sort, then
    return alert('not empty')//what ever you are trying to do once

 return alert('empty'); //nope obj was empty do this instead;
}

4voto

Kieve Chua Punkte 73

Es könnte ein bisschen hakelig sein. Sie können dies versuchen.

if (JSON.stringify(data).length === 2) {
   // Do something
}

Nicht sicher, ob es eine Nachteil dieser Methode.

2 Stimmen

Wenn es sich bei den Daten nicht um ein Objekt handelt, könnte dies zu einem falsch positiven Ergebnis für JSON.stringify([]) o JSON.stringify("") o JSON.stringify(42) . Das ist alles, was ich habe.

4 Stimmen

Ich denke auch, dass die Leistung schlechter sein könnte als bei einer anderen Methode. Und JSON.stringify ist nicht in jedem Browser verfügbar

0 Stimmen

+1 Ausgezeichnete Antwort + das ist eine superschnelle Lösung !!! Ignorieren Sie die anderen Kommentare, wenn Ihre Anwendung auf moderne Webbrowser-Engines verweist.

1voto

Remi Punkte 19243

Schneller Onliner für 'Wörterbuch'-Objekte:

function isEmptyDict(d){for (var k in d) return false; return true}

1 Stimmen

Ich denke, das wird eine bessere Leistung haben: isEmpty = function(a,b){for(b in a){break}return !b};

1 Stimmen

Ich verstehe nicht, warum break, return !b besser sein soll als return false/return true? break und !b erfordern beide eine zusätzliche "Operation". Ein kleines Detail ist, dass b keine Eingabevariable sein sollte, sondern innerhalb der Funktion definiert wird; for (var b in a)... tut dies, auch wenn a 'leer' ist

1voto

Andreas Dyballa Punkte 179

Sie können einen Fallback schreiben, wenn Array.isArray und Object.getOwnPropertyNames nicht verfügbar sind

XX.isEmpty = function(a){
    if(Array.isArray(a)){
        return (a.length==0);
    }
    if(!a){
        return true;
    }
    if(a instanceof Object){

        if(a instanceof Date){
            return false;
        }

        if(Object.getOwnPropertyNames(a).length == 0){
            return true;
        }
    }
    return false;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X