Objet JS:
var saver = {
title: false,
preview: false,
body: false,
bottom: false,
locale: false
};
La question est de savoir comment vérifier si toutes les valeurs sont false ?
Je peux utiliser la fonction $ .each () jQuery et une variable de drapeau, mais il pourrait y avoir une meilleure solution?
Ça fera l'affaire...
var result = true;
for (var i in saver) {
if (saver[i] === true) {
result = false;
break;
}
}
Vous pouvez itérer des objets à l'aide d'une boucle, par index ou par clé (comme ci-dessus).
Si vous recherchez un code ordonné et ne le répétez pas, mettez-le simplement dans une fonction ...
Object.prototype.allFalse = function() {
for (var i in this) {
if (this[i] === true) return false;
}
return true;
}
Ensuite, vous pouvez l'appeler quand vous avez besoin, comme ça ...
alert(saver.allFalse());
Voici un échantillon de travail ...
Object.prototype.allFalse = function() {
for (var i in this) {
if (this[i] === true) return false;
}
return true;
}
var saver = {
title: false,
preview: false,
body: false,
bottom: false,
locale: false
};
console.log("all are false - should alert 'true'");
console.log(saver.allFalse());
saver.body = true;
console.log("one is now true - should alert 'false'");
console.log(saver.allFalse());
Dans un commentaire, vous demandez si vous pouvez éviter les itérations. Vous pouvez utiliser une bibliothèque javascript prenant en charge une approche fonctionnelle, telle que Underscore , Lodash ou Sugar .
Avec Underscore et Lodash, vous pouvez écrire quelque chose comme ceci:
var result = _.every(_.values(saver), function(v) {return !v;});
Avec Sugar, vous pouvez simplement écrire:
var result = Object.all(saver,false);
C'est une solution très simple qui nécessite JavaScript 1.8.5.
Object.keys(obj).every((k) => !obj[k])
Exemples:
obj = {'a': true, 'b': true}
Object.keys(obj).every((k) => !obj[k]) // returns false
obj = {'a': false, 'b': true}
Object.keys(obj).every((k) => !obj[k]) // returns false
obj = {'a': false, 'b': false}
Object.keys(obj).every((k) => !obj[k]) // returns true
Sinon, vous pouvez écrire
Object.keys(obj).every((k) => obj[k] == false)
Object.keys(obj).every((k) => obj[k] === false) // or this
Object.keys(obj).every((k) => obj[k]) // or this to return true if all values are true
Consultez la référence de Mozilla Developer Network Object.keys () pour plus d'informations.
Si vous voulez le faire sans itération externe (c'est-à-dire dans votre code), essayez de mapper les propriétés sur un tableau avec $.map
, puis utilisez $.inArray
pour voir s'il existe des valeurs vraies:
var allFalse = $.inArray(true, $.map(saver, function(obj){return obj})) < 0;
Fait comme ça,
for (var i in saver) {
if (saver[i]) {
return false; // here if any value is true it wll return as false /
}
}
return true; //here if all value is false it wll return as true
One-Liner court et pratique, entièrement pris en charge par les navigateurs:
Object.keys(saver).every(k => saver[k] === false);
ou
Object.values(saver).every(v => v === false);
(Attention, Object.values () n'est pas encore supporté par IE.)
À partir de Lodash 4.0, overEvery peut être utilisé
overEvery(saver, false)
parcourt chaque élément et vérifie si sa false
Il retourne true
si chaque élément est false
sinon retourne false