如何检查所有对象键是否具有错误值
JS对象:
var saver = { title: false, preview: false, body: false, bottom: false, locale: 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());
在评论中,您询问是否可以避免迭代。 如果你使用支持function方法的javascript库,比如Underscore , Lodash或Sugar ,你可以。
使用Underscore和Lodash,您可以编写如下内容:
var result = _.every(_.values(saver), function(v) {return !v;});
使用Sugar,您可以简单地写:
var result = Object.all(saver,false);
这是一个非常简单的解决方案,需要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;
JSFiddle: http : //jsfiddle.net/TrueBlueAussie/FLhZL/1/
这样做,
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
从Lodash 4.0开始,可以使用overEvery
overEvery(saver, false)
循环遍历每个元素并检查它是否为false
如果每个元素都为false
则返回false
否则返回false
简短易用的单行程序,完全由浏览器支持:
Object.keys(saver).every(k => saver[k] === false);
要么
Object.values(saver).every(v => v === false);
(小心, IE还不支持Object.values() 。)