'How to check if every properties in an object are null
I have an object, sometimes it is empty like so {}
other times it will have properties that are set to null.
{
property1: null,
property2: null
}
How can I determine if ALL the properties within this object is null? If they are all null then return false.
At the moment I'm using lodash to check for the first case where the object is simply {}
empty. But I also need to cover the second case.
if (isEmpty(this.report.device)) {
return false;
}
return true;
Solution 1:[1]
You can use Object.values
to convert the object into array and use every
to check each element. Use !
to negate the value.
let report = {
property1: null,
property2: null,
}
let result = !Object.values(report).every(o => o === null);
console.log(result);
An example some elements are not null
let report = {
property1: null,
property2: 1,
}
let result = !Object.values(report).every(o => o === null);
console.log(result);
Doc: Object.values(), every()
Solution 2:[2]
Approach using .some()
instead of .every()
:
function isEmpty (obj) {
return !Object.values(obj).some(element => element !== null);
}
This function (named isEmpty
to match the name given in the question) shall return false
if any obj
property is not null
and true
otherwise.
Solution 3:[3]
You can use the Object.keys()
method this will return all keys in that Object as an Array. This makes it possible to do Object.keys(this.report.device).filter(key => !this.report.device[key] === null)
, which will return you the amount of not null keys, if this is 0 then you have your answer.
In essence relying on null
properties is not such a good approach it's better to make those properties undefined
or just to return a flat Object from your API.
Hope this helped.
Solution 4:[4]
This is very simple and can be done with a one liner !
function IsAllPropertiesNull(obj) {
return Object.values(obj).every(v=>v == null);
}
a = {'a': null, 'b':null};
var isAllNull = IsAllPropertiesNull(a)
// isAllNull = true
explanation - get all values of object - iterate them and check for null
Good luck!
Solution 5:[5]
Use Object.entries and Array.every
let obj = {
property1: null,
property2: null,
};
function isEmpty(o) {
return Object.entries(o).every(([k,v]) => v === null);
}
if(isEmpty(obj)) {
console.log("Object is empty");
}
Solution 6:[6]
In order to check if object has null value for all the keys. One cleaner approach could be.
const set = new Set(Object.values(obj));
const hasOnlyNullValues = set.size === 1 && set.has(null);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | |
Solution 3 | jovi De Croock |
Solution 4 | Ran Sasportas |
Solution 5 | |
Solution 6 | Vikramaditya |