如何检查所有对象键是否具有错误值

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() 。)