检查Javascript对象是否仅包含falsy值
我得到了这样一个物体:检查Javascript对象是否仅包含falsy值,javascript,object,Javascript,Object,我得到了这样一个物体: var obj1 = {foo: false, bar: ''}; var obj2 = {foo: false, bar: '1'}; var obj3 = {foo: true, bar: ''}; var obj4 = {foo: true, bar: '1'}; 我想要一个简单的函数来检查这些对象的所有值是否为false。在此给定示例中,只有obj1应触发false,因为其所有值均为falseobj2,obj3和obj4至少拥有一个为真的值 有简单的解决方案
var obj1 = {foo: false, bar: ''};
var obj2 = {foo: false, bar: '1'};
var obj3 = {foo: true, bar: ''};
var obj4 = {foo: true, bar: '1'};
我想要一个简单的函数来检查这些对象的所有值是否为false。在此给定示例中,只有obj1应触发false,因为其所有值均为falseobj2
,obj3
和obj4
至少拥有一个为真的值
有简单的解决方案吗?作为一个线性系统:
!Object.keys(obj1).some(function(k) {return obj1[k];});
// Array.some returns true if any callback returns true
// You want true if all return false, aka if none return true
// So just negate Array.some
作为一种更具可读性的方法:
var ok = true, k;
for( k in obj1) if( obj1.hasOwnProperty(k)) {
if( obj1[k]) {
ok = false;
break;
}
}
我假设您想要一个可以在任何对象上工作的动态函数,那么只迭代对象的所有索引怎么样
function objIsFalsy(obj) {
for(var i in obj) {
if(obj[i]) return false;
}
return true;
}
遵循以下步骤:-
函数isFalsyObj(obj){
如果(obj[elt]!=false)返回false,则为(obj中的var elt);
返回true;
}
var obj1={foo:false,条:''};
var obj2={foo:false,bar:'1'};
var obj3={foo:true,条:''};
var obj4={foo:true,bar:'1'};
console.log(isFalsyObj(obj1))//真的
console.log(isFalsyObj(obj2))//假的
console.log(isFalsyObj(obj3))//假的
console.log(isFalsyObj(obj4))//false
您可以使用以下功能:
[ob1, ob2, ob3, obj4].some(function(obj) { return obj.foo })
的其他实现存在一个缺陷。some()
您希望在所有属性都是虚假值的情况下返回值,而不仅仅是在任何属性根据OP要求都是虚假值的情况下
这样就行了
function isFalse(obj) {
return Object
.keys(obj)
.every(function (k) {
return !obj[k];
});
}
请参阅jsFiddle以获取证据
Object.keys的另一个好处是它只返回自己的属性,因此您不必在手动循环中进行检查。对于每个对象:如果每个属性值都是
false
返回false
,否则true
:
var out = [obj1, obj2, obj3, obj4].map(function (obj) {
return !Object.keys(obj).every(function (p) {
return !obj[p];
})
}); // [false, true, true, true]
检查此项
isvalidObj(obj1);//假的
isvalidObj(obj2);//真的
“Object.values()方法返回给定对象自身可枚举属性值的数组”()
一旦我得到了这个值数组,我将通过删除每个falsy值来过滤它
.filter(value=>!!value)
将通过仅返回truthy值来过滤数组
如果过滤数组的长度大于0,则表示至少有一个对象的值为truthy。然后该函数将返回true
如果过滤后的数组为空,则表示对象的所有值都是假的。然后函数将返回
false
欢迎使用Stackoverflow!请编辑您的答案,并解释一下您正在做什么,有关更多提示,请参阅。
function isvalidObj(obj){
for(var i in obj){
if(obj[i]) return true;
}
return false;
}
const isObjectFilled = obj => Object.values(obj).filter(value => !!value).length > 0
isObjectFilled(obj1) // false
isObjectFilled(obj2) // true
isObjectFilled(obj3) // true
isObjectFilled(obj4) // true