如何检查对象中的数组是否全部为空?

时间:2016-10-07 14:23:12

标签: javascript arrays object

所以我需要传入一个对象,其中每个属性都是数组。该函数将使用每个数组中保存的信息,但我想通过检查每个数组是否为空/空来检查整个对象是否为空(不仅没有属性)。到目前为止我所拥有的:

function isUnPopulatedObject(obj) { // checks if any of the object's values are falsy
    if (!obj) {
        return true;
    }

    for (var i = 0; i < obj.length; i++) {
        console.log(obj[i]);
        if (obj[i].length != 0) {
            return false;
        }    
    }

    return true;  
}

例如,这会导致上面的false

obj {
    0: Array[0]
    1: Array[1]
    2: Array[0]
}

虽然这是我检查的空(所以是真的):

obj {
    0: Array[0]
    1: Array[0]
    2: Array[0]
}

上述代码不起作用。提前谢谢。

4 个答案:

答案 0 :(得分:4)

因此,如果我们想要遍历该对象并查找该对象的每个键是否通过检查,我们可以使用Object.keys和Array#extra every,如下所示:

var allEmpty = Object.keys(obj).every(function(key){
return obj[key].length === 0
})

这会将allEmpty设置为布尔值(true / false),具体取决于每次运行给定的检查时obj[key].length === 0是否返回true。

此对象将allEmpty设置为true:

var obj = {
    0: [],
    1: [],
    2: []
}

虽然这会将其设置为false:

var obj = {
    0: [],
    1: [],
    2: [],
    3: [1]
}

答案 1 :(得分:2)

object没有长度属性。还有其他几种方法可以遍历对象的值,您应该能够find

要检查值是否为数组,您可以使用Array.isArray

例如:

function objectIsEmpty(obj) {
    return Object.keys(obj).every(function(key) {
      var val = obj[key];  
      
      if (Array.isArray(val) && val.length === 0) {
        return true;
      }
      
      // Other rules go here:
      // ...
      
      return false;
    });
};


console.log(objectIsEmpty({ 0: [], 1: [], 2: [] }));
console.log(objectIsEmpty({ 0: [], 1: [1], 2: [] }));

答案 2 :(得分:1)

由于您的对象没有length属性,因此无效。

试试这个简单的

function isUnPopulatedObject(obj) { 
    return Object.keys( obj ).filter( function(key){
      return obj[ key ].length > 0;  //if any array has a property then filter will return this key.
    }).length == 0; //used == here since you want to check if all are empty
}

或使用every

function isUnPopulatedObject(obj) { 
    return Object.keys( obj ).every( function(key){
      return obj[ key ].length == 0;  
    }); 
}

或使用some

function isUnPopulatedObject(obj) { 
    return Object.keys( obj ).some( function(key){
      return obj[ key ].length > 0;  
    }) === false; 
}

答案 3 :(得分:1)

开始在城里使用这个新孩子可能会很有趣。 Object.values()

var o1 = {0: [], 1: [1], 2: []},
    o2 = {0: [], 1: [], 2: []},
chkObj = o => Object.values(o).every(a => a.length === 0);
console.log(chkObj(o1));
console.log(chkObj(o2));

注意:这应仅适用于最新版本的Chrome,Opera和FF