JSオブジェクト:
var saver = {
title: false,
preview: false,
body: false,
bottom: false,
locale: false
};
問題は、すべての値がfalse?であるかどうかを確認する方法です。
$ .each()jQuery関数といくつかのフラグ変数を使用できますが、より良い解決策がありますか?
これはトリックを行います...
var result = true;
for (var i in saver) {
if (saver[i] === true) {
result = false;
break;
}
}
ループを使用して、インデックスまたはキー(上記のように)を使用してオブジェクトを反復できます。
きちんとしたコードを求めていて、それを繰り返さない場合は、単に関数に入れてください...
Object.prototype.allFalse = function() {
for (var i in this) {
if (this[i] === true) return false;
}
return true;
}
次に、このように、必要なときにいつでも呼び出すことができます...
alert(saver.allFalse());
これが実際のサンプルです...
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());
これは、JavaScript 1.8.5を必要とする非常にシンプルなソリューションです。
Object.keys(obj).every((k) => !obj[k])
例:
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
あるいは、あなたは書くことができます
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
詳細については、 Mozilla Developer Network Object.keys()のリファレンス を参照してください。
やりたい場合外部反復なし(つまりコード内)、プロパティを_$.map
_を使用して配列にマッピングしてから、_$.inArray
_を使用して真の値が存在するかどうかを確認します。 :
_var allFalse = $.inArray(true, $.map(saver, function(obj){return obj})) < 0;
_
Lodashでは、const allFalse = !_.some(saver);
も実行できます。
Lodash(3.10.1+)は、これをさらに明確にして明示的に表現します。
_.every({a: false, b: false, c: false}, _.negate(Boolean)); // True
しかし、_.some
per ngstschr's answer の方が簡潔です。
こうやって
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
短くて便利なワンライナー、ブラウザーで完全にサポート:
Object.keys(saver).every(k => saver[k] === false);
または
Object.values(saver).every(v => v === false);
(注意tho、 Object.values() は[〜#〜] ie [〜#〜]ではまだサポートされていません)
Lodash 4.0以降、 overEvery を使用できます
overEvery(saver, false)
はすべての要素をループし、そのfalse
かどうかを確認します
すべての要素がtrue
の場合はfalse
を返し、そうでない場合はfalse
を返します