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.
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]
}
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: [] }));
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With