J'ai un objet comme ça:
ricHistory = {
name1: [{
test1: value1,
test2: value2,
test3: value3
}],
name2: [{
test1: value1,
test2: value2,
test3: value3
}]
};
Maintenant, je veux vérifier si par exemple name2 est vide avec Javascript/jQuery. Je connais la méthode hasOwnProperty
. Cela fonctionne pour data.hasOwnProperty('name2')
seulement si le nom existe ou non, mais je dois vérifier si c'est vide.
Essaye ça:
if (ricHistory.name2 &&
ricHistory.name2 instanceof Array &&
!ricHistory.name2.length) {
console.log('name2 is empty array');
} else {
console.log('name2 does not exists or is not an empty array.');
}
La solution ci-dessus vous indiquera si richHistory.name2 existe, est un tableau et qu'il n'est pas vide.
vous pouvez le faire par jQuery.isEmptyObject()
Vérifiez si un objet est vide (ne contient aucune propriété).
jQuery.isEmptyObject( object )
Exemple:
jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false
Une autre syntaxe de JQuery, à savoir que vous n’utilisez pas Prototype ou similaire et que vous préférez utiliser $ plutôt que le préfixe jQuery;
$.isEmptyObject( object )
Essayez cette fonction utile:
function isEmpty(obj) {
if(isSet(obj)) {
if (obj.length && obj.length > 0) {
return false;
}
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) {
return false;
}
}
}
return true;
};
function isSet(val) {
if ((val != undefined) && (val != null)){
return true;
}
return false;
};
Je vais comme ça tout le temps dans mon code:
Supposons que mon contrôleur retourne quelque chose comme ci-dessous:
$return['divostar'] = $this->report->get_additional_divostar_report($data);
$return['success'] = true;
return response()->json($return);
Dans Jquery, je voudrais vérifier comme ci-dessous:
if (jQuery.isEmptyObject(data.divostar)){
html_result = "<p id='report'>No report yet</p>";
$('#no_report_table').html(html_result).fadeIn('fast');
}
Sale mais simple et fonctionne:
function isEmptyObject(obj) {
return JSON.stringify(obj) == '{}';
}
Vous pouvez raccourcir isSet
en faisant ceci à la place:
function isSet(val) { return ((val != undefined) && (val != null));}
Je trouve plus facile de simplement renvoyer le booléen de la déclaration au lieu de le remettre, puis de le retourner.