How to Check if Arrays in a Object Are All Empty? [duplicate]

最后都变了- 提交于 2020-03-19 06:30:08

问题


So I need to pass in a object where each of its properties are arrays. The function will use the information held in each array, but I want to check if the whole object is empty empty (not just having no properties) by checking if each of its arrays are empty/null as well. What I have so far:

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

So for example, this would result in the above being false:

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

While this is the empty I'm checking for (so is true):

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

The above code doesn't work. Thanks in advance.


回答1:


So if we want to go through the object and find if every key of that object passes a check, we can use Object.keys and the Array#extra every like so:

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

This will set allEmpty to a boolean value (true/false), depending on if every time we run the given check obj[key].length === 0 returns true or not.

This object sets allEmpty to true:

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

while this sets it to false:

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



回答2:


An object doesn't have a length property. There are several other ways to loop through an object's values, which you should be able to find.

To check if a value is an array, you can use Array.isArray.

For example:

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: [] }));



回答3:


it is not working since your object doesn't have length property.

Try this simple one

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
}

or use every

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

or use some

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



回答4:


It might be interesting to start using the new kid in town. 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));

Note: This should work only on the newest versions of Chrome, Opera and FF



来源:https://stackoverflow.com/questions/39919560/how-to-check-if-arrays-in-a-object-are-all-empty

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!