Javascript 如何检查所有对象关键帧是否具有假值

Javascript 如何检查所有对象关键帧是否具有假值,javascript,jquery,arrays,javascript-objects,Javascript,Jquery,Arrays,Javascript Objects,JS对象: var saver = { title: false, preview: false, body: false, bottom: false, locale: false }; 问题是如何检查所有值是否均为false 我可以使用$.each()jQuery函数和一些标志变量,但有更好的解决方案吗 这样就可以了 var result = true; for (var i in saver) {

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){
如果(此[i]==true)返回false;
}
返回true;
}
var-saver={
标题:假,
预览:假,
正文:错,
底部:错误,
地点:false
};
log(“全部为假-应警告“真”);
console.log(saver.allFalse());
saver.body=true;
log(“一个现在是真的-应该警告'false'”);
console.log(saver.allFalse())这样做

 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

在评论中,您会问是否可以避免重复。如果您使用支持函数方法的javascript库,例如,或,则可以

使用下划线和Lodash,您可以编写如下内容:

var result = _.every(_.values(saver), function(v) {return !v;});
有了糖,你可以简单地写下:

var result = Object.all(saver,false);
如果要在不进行外部迭代的情况下执行此操作(即在代码中),请尝试使用
$.map
将属性映射到数组,然后使用
$.inArray
查看是否存在任何真值:

var allFalse = $.inArray(true, $.map(saver, function(obj){return obj})) < 0;
var allFalse=$.inArray(true,$.map(saver,function(obj){return obj}))<0;
jsiddle:从Lodash 4.0开始,可以使用

oververy(saver,false)
循环遍历每个元素并检查其
false


如果每个元素都是
false
,则返回
true
,否则返回
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

有关更多信息,请参阅。

浏览器完全支持的简短方便的一行程序:

Object.keys(saver).every(k => saver[k] === false);
Object.keys(saver).every(key => saver[key] === false); // return true


(请注意,IE还不支持它。)

使用lodash,您还可以执行
const allFalse=!\。一些(储蓄者)

Lodash(3.10.1+)更清晰地表达了这一点:

_.every({a: false, b: false, c: false}, _.negate(Boolean)); // True
但是使用
\有些
per更简洁。

使用array.some() 它更清晰易懂!它可以节省我们的运行时间,因为一旦函数条件存在一次,它就会跳出循环并返回true

如果您确实需要严格的相等性来表示错误,请编写以下内容:

Object.values(obj).some(val => val !== false)

Object.values(obj)
用每个键的值组成一个数组。

这应该适用于所有主要浏览器:

Object.keys(saver).every(k => saver[k] === false);
Object.keys(saver).every(key => saver[key] === false); // return true
✏️ 此单行程序检查对象数组中的任何对象内是否存在错误值: 我发现这一点有助于防止null/falsy值被进一步传递:


constlista=[{a:'Thnx。但是这个方法类似于我的$.each()方法。我的问题是如何避免迭代?你不能避免迭代。如果有一种原生的方法来做你要做的事情,它会涉及到后台的迭代。我认为你最好希望的是一个小的或整洁的迭代。你不能。迭代效率要高得多,否则,如果你改变了对象的属性,你会您必须更改检查它们的代码。只需稍微更改它,以适合特定的“all properties false”,而不是“Where a true”我最初采用的方法。好的,谢谢。看起来除了迭代之外没有其他方法了。哦,好吧…=)但我肯定使用了你关于函数的最后一句话。你的意思是不迭代属性?是的。我想找到更优雅的解决方案。下面添加了一个更优雅的解决方案。你可以不用迭代,只使用jQuery。你呢也可以在Lodash中执行此操作:
var result=u0.each(0.valuesIn(saver),Boolean));
Lodash:
const result=0.some(saver);
我无法理解ES6(角度)语法。它返回一个函数,我需要它返回一个布尔值。@tatsu发布一个新问题并提供更多详细信息。这是不正确的,
oververy
返回一个函数。Per docs:“创建一个函数,当使用它接收的参数调用时,检查是否所有谓词都返回truthy。”他们想知道是否所有谓词都是false(不是true)所以,如果有些是真的,那么不是所有的都是假的。
Object.values(obj)。every((value)=>value==false)
也应该起作用。
const hasFalsyValue = (list) =>
 !list.every(obj => Object.values(obj).every(prop => prop))