检查Javascript对象是否仅包含有价值的值

时间:2016-01-14 11:25:07

标签: javascript object

我有一个这样的对象:

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拥有至少一个真实的值。

有一个简单的解决方案吗?

9 个答案:

答案 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]

DEMO

答案 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)

请按以下步骤操作: -

  1. 将所有对象变量放在数组中。
  2. 为上面的数组创建一个foreach循环。
  3. 在循环内部检查对象键的值。

答案 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;
}