3893 Stimmen

Wie kann ich auf ein leeres JavaScript-Objekt testen?

Nach einer AJAX-Anfrage kann es vorkommen, dass meine Anwendung ein leeres Objekt zurückgibt, z. B.:

var a = {};

Wie kann ich überprüfen, ob das der Fall ist?

4voto

Aakash Handa Punkte 1003

Der neue Wert Way to check lautet if(Object.entries(this.props.myarticle).length===0){ }

Hier ist mein Artikel Objekt

4voto

Juan Vieira Punkte 128

Ich weiß, dass dies keine 100-prozentige Antwort auf Ihre Frage ist, aber ich habe ähnliche Probleme schon einmal gehabt, und hier ist, wie ich sie zu lösen pflege:

Ich habe eine API, die ein leeres Objekt zurückgeben kann. Weil Ich weiß, welche Felder zu erwarten sind von der API prüfe ich nur, ob eines der erforderlichen Felder vorhanden ist oder nicht.

Zum Beispiel:

API-Rückgaben {} or {agentID: '1234' (required), address: '1234 lane' (opt),...} . In meiner aufrufenden Funktion prüfe ich nur

if(response.data && response.data.agentID) { 
  do something with my agentID 
} else { 
  is empty response
}

Auf diese Weise brauche ich diese teuren Methoden nicht zu verwenden, um zu prüfen, ob ein Objekt leer ist. Das Objekt ist für meine aufrufende Funktion leer, wenn es das Feld agentID nicht enthält.

3voto

synthet1c Punkte 5825

Ich kann nicht glauben, nach zwei Jahren der Programmierung js es nie geklickt, dass leere Objekte und Arrays sind nicht falsch, das seltsamste, was ist es nie erwischt mich aus.

dies wird zurückgegeben true wenn die Eingabe standardmäßig falsch ist oder wenn es sich um ein leeres Objekt oder Array handelt. die Umkehrung ist die trueish Funktion

http://codepen.io/synthet1c/pen/pjmoWL

function falsish( obj ){
    if( (typeof obj === 'number' && obj > 0) || obj === true ){
        return false;
    }
    return !!obj
        ? !Object.keys( obj ).length
        : true;
}

function trueish( obj ){
    return !falsish( obj );
}

falsish({})           //=> true
falsish({foo:'bar'})  //=> false
falsish([])           //=> true
falsish(['foo'])      //=> false
falsish(false)        //=> true
falsish(true)         //=> false
// the rest are on codepen

1 Stimmen

@user1167442 Das von Ihnen angegebene Array ist nicht leer, sondern ein Array, das ein leeres Array enthält, also nicht das, was ich als falshish bezeichnen würde. Ich bin mir nicht sicher, ob es ohne eine Rekursion behandelt werden kann, die die Komplexität der Grundfunktion erhöht.

0 Stimmen

- Ich habe sie. Ich habe hier nach einer Lösung gesucht, die beide Szenarien elegant handhabt, und obwohl dein Code gut ist, war ich irritiert, dass er mein Problem nicht gelöst hat :). Du wurdest für die Lösung des Problems, das du zu lösen versucht hast, hochgestimmt.

3voto

010011100101 Punkte 1462

Mir gefiel diese Antwort, die ich mit Hilfe einiger anderer Antworten hier gefunden habe. Ich dachte, ich teile sie.

Object.defineProperty(Object.prototype, 'isEmpty', {
    get() {
        for(var p in this) {
            if (this.hasOwnProperty(p)) {return false}
        }
        return true;
    }
});

let users = {};
let colors = {primary: 'red'};
let sizes = {sm: 100, md: 200, lg: 300};

console.log(
'\nusers =', users,
'\nusers.isEmpty ==> ' + users.isEmpty,
'\n\n-------------\n',
'\ncolors =', colors,
'\ncolors.isEmpty ==> ' + colors.isEmpty,
'\n\n-------------\n',
'\nsizes =', sizes,
'\nsizes.isEmpty ==> ' + sizes.isEmpty,
'\n',
''
);

2voto

chandu Punkte 2248

Ab jQuery 1.4 isEmptyObject() Methode prüft sowohl Eigenschaften des Objekts selbst als auch Eigenschaften, die von Prototypen geerbt wurden (da sie keine hasOwnProperty verwendet). Das Argument sollte immer ein einfaches JavaScript-Objekt sein, da andere Objekttypen (DOM-Elemente, primitive Strings/Nummern, Host-Objekte) in verschiedenen Browsern möglicherweise keine konsistenten Ergebnisse liefern. Um festzustellen, ob ein Objekt ein einfaches JavaScript-Objekt ist, verwenden Sie $.isPlainObject() .

jQuery.isPlainObject({}) // true

jQuery.isPlainObject( "test" ) // false

Jquery api

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