我有一个这样的对象:
var obj1 = {foo: false, bar: ''};
var obj2 = {foo: false, bar: '1'};
var obj3 = {foo: true, bar: ''};
var obj4 = {foo: true, bar: '1'};
如果所有值都是假的,我想要一个简单的函数来检查这些对象。在这个给定的例子中,只有obj1应该触发false - 因为它们的所有值都是假的。 obj2,obj3& obj4拥有至少一个真实的值。
有一个简单的解决方案吗?
答案 0 :(得分:3)
作为一个单行:
!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;
}
}
答案 1 :(得分:1)
您可以使用某些功能:
[ob1, ob2, ob3, obj4].some(function(obj) { return obj.foo })
答案 2 :(得分:1)
.some()
的其他实现存在一个缺陷,您希望返回所有属性都是假值的值,而不是根据OP要求,任何属性都是伪值。
所以这样做
function isFalse(obj) {
return Object
.keys(obj)
.every(function (k) {
return !obj[k];
});
}
请参阅jsFiddle以获取证据https://jsfiddle.net/0se3yh62/
Object.keys的另一个好处是它只返回自己的属性,因此您不必检查手动循环。
答案 3 :(得分:1)
对于每个对象:如果每个属性值都为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]
答案 4 :(得分:1)
const isObjectFilled = obj => Object.values(obj).filter(value => !!value).length > 0
isObjectFilled(obj1) // false
isObjectFilled(obj2) // true
isObjectFilled(obj3) // true
isObjectFilled(obj4) // true
“ Object.values()
方法将返回给定对象自己的可枚举属性值的数组”(MDN)
一旦有了这个值数组,我将通过删除每个伪造的值对其进行过滤。
.filter(value => !!value)
将通过仅返回真实值来过滤数组。
如果过滤后的数组的长度大于0,则意味着该对象的至少一个值是真实的。然后该函数将返回true
如果过滤后的数组为空,则表示该对象的所有值都是虚假的。然后该函数将返回false
答案 5 :(得分:0)
我假设你想要一个适用于任何对象的动态函数,那么如何只迭代所有对象的索引呢?
function objIsFalsy(obj) {
for(var i in obj) {
if(obj[i]) return false;
}
return true;
}
答案 6 :(得分:0)
请按以下步骤操作: -
答案 7 :(得分:0)
循环你的对象:
function isFalsyObj(obj) {
for(var elt in obj) if (obj[elt]!=false) return false;
return true;
}
var obj1 = {foo: false, bar: ''};
var obj2 = {foo: false, bar: '1'};
var obj3 = {foo: true, bar: ''};
var obj4 = {foo: true, bar: '1'};
console.log(isFalsyObj(obj1));//true
console.log(isFalsyObj(obj2));//false
console.log(isFalsyObj(obj3));//false
console.log(isFalsyObj(obj4));//false
答案 8 :(得分:0)
检查
isvalidObj(OBJ1); //假
isvalidObj(OBJ2); // true
function isvalidObj(obj){
for(var i in obj){
if(obj[i]) return true;
}
return false;
}