Javascript 如何检查所有对象关键帧是否具有假值
JS对象: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) {
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))