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?
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?
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.
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
@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.
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',
''
);
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
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.