Quel est le moyen le plus élégant de déterminer si tous les attributs d'un objet javascript sont nuls ou la chaîne vide? Cela devrait fonctionner pour un nombre arbitraire d'attributs.
{'a':null, 'b':''} //should return true for this object
{'a':1, 'b':''} //should return false for this object
{'a':0, 'b':1} //should return false
{'a':'', 'b':''} //should return true
Créez une fonction à boucler et vérifiez:
function checkProperties(obj) {
for (var key in obj) {
if (obj[key] !== null && obj[key] != "")
return false;
}
return true;
}
var obj = {
x: null,
y: "",
z: 1
}
checkProperties(obj) //returns true
Réponse 2017: Vérifiez toutes les valeurs avec Object.values (). Retourne un tableau avec les valeurs que vous pouvez vérifier avec Array.every () ou Array.some () ... etc.
const isEmpty = Object.values(object).every(x => (x === null || x === ''));
Voici ma version, vérifiant spécifiquement les chaînes nulles et vides (il serait plus facile de simplement vérifier la fausseté)
function isEmptyObject(o) {
return Object.keys(o).every(function(x) {
return o[x]===''||o[x]===null; // or just "return o[x];" for falsy values
});
}
Vous pouvez utiliser le prototype Array.reduce sur les clés de votre objet.
En supposant que l'objet est structuré comme suit:
var obj = {
x: null,
y: "",
z: 1
}
vous pouvez utiliser l'instruction suivante pour déterminer si toutes ses propriétés sont non définies ou définies sur chaîne vide à l'aide d'une seule ligne:
Object.keys(obj).reduce((res, k) => res && !(!!obj[k] || obj[k] === false || !isNaN(parseInt(obj[k]))), true) // returns false
Si vous souhaitez découvrir si toutes ses propriétés sont définies à la place, vous devez supprimer la négation avant les conditions et définir la valeur du résultat initial sur true uniquement si l'objet a des clés:
Object.keys(obj).reduce((res, k) => res && (!!obj[k] || obj[k] === false || !isNaN(parseInt(obj[k]))), Object.keys(obj).length > 0) // returns false as well
Complétez simplement les réponses précédentes: elles fonctionneront si votre objet ne contient pas de tableaux ou d'objets. Si tel est le cas, vous devrez effectuer une «vérification approfondie».
Alors je suis venu avec cette solution. Il évaluera l'objet comme vide si all ses valeurs (et ses valeurs à l'intérieur des valeurs) sont undefined
, {}
ou []
.
function deepCheckEmptyObject(obj) {
return Object.values(obj).every( value => {
if (value === undefined) return true;
else if ((value instanceof Array || value instanceof Object) && _.isEmpty(value) ) return true;
else if (value instanceof Array && !_.isEmpty(value)) return deepCheckEmptyArray(value);
else if (value instanceof Object && !_.isEmpty(value)) return deepCheckEmptyObject(value);
else return false;
});
}
function deepCheckEmptyArray(array) {
return array.every( value => {
if (value === undefined) return true;
else if ((value instanceof Array || value instanceof Object) && _.isEmpty(value)) return true;
else if (value instanceof Array && !_.isEmpty(value)) return deepCheckEmptyArray(value);
else if (value instanceof Object && !_.isEmpty(value)) return deepCheckEmptyObject(value);
else return false;
});
}
Notez que la fonction .isEmpty()
de Lodash est utilisée pour effectuer le travail pénible après avoir «isolé» une valeur. Ici, Lodash est importé en tant que '_'.
J'espère que ça aide!
Sur la base de la réponse d’adeneo, j’ai créé une condition de ligne unique. J'espère que cela sera utile à quelqu'un.
var test = {
"email": "[email protected]",
"phone": "1234567890",
"name": "Test",
"mobile": "9876543210",
"address": {
"street": "",
"city": "",
"state": "",
"country": "",
"postalcode": "r"
},
"website": "www.test.com"
};
if (Object.keys(test.address).every(function(x) { return test.address[x]===''||test.address[x]===null;}) === false) {
console.log('has something');
} else {
console.log('nothing');
}
Vous pouvez le tester https://jsfiddle.net/4uyue8tk/2/
Ceci ignore l'attribut de fonction
function checkIsNull(obj){
let isNull=true;
for(let key in obj){
if (obj[key] && typeof obj[key] !== 'function') {
isNull = false;
}
}
return isNull;
}
var objectWithFunctionEmpty={
"name":undefined,
"surname":null,
"fun": function (){ alert('ciao'); }
}
var objectWithFunctionFull={
"name":undefined,
"surname":"bla bla",
"fun": function (){ alert('ciao'); }
}
checkIsNull(objectWithFunctionEmpty); //true
checkIsNull(objectWithFunctionFull); //false
En me basant sur d’autres réponses, j’utiliserais lodash pour vérifier isEmpty
sur l’objet, ainsi que ses propriétés.
const isEmpty = (object) => return _.isEmpty(object) || !Object.values(object).some(x => !_.isEmpty(x))
Basé sur la réponse de tymeJv =)
function checkProperties(obj) {
var state = true;
for (var key in obj) {
if ( !( obj[key] === null || obj[key] === "" ) ) {
state = false;
break;
}
}
return state;
}
var obj = {
x: null,
y: "",
z: 1
}
checkProperties(obj) //returns false
J'espère que ça aide =)