Reputation: 659
I have this object:
{"": undefined}
and when I check this object for empty in this way:
_.isEmpty({"": undefined})
I get false
result, maybe in lodash we have another method?
Upvotes: 49
Views: 154239
Reputation: 555
try this one
_.omitBy(
obj,
(v) =>
_.isUndefined(v) ||
_.isNull(v) ||
v === '' ||
(v && v instanceof Object && Object.keys(v).length === 0)
);
Upvotes: -1
Reputation: 2412
I'd do it this way
_.isEmpty(_.omitBy(object_to_check, _.isNil)
_.omitBy removes all the keys with null & undefined values in this example.
To remove only undefined you can use _.isUndefined
instead of _.isNil
Upvotes: 3
Reputation: 12965
To provide an alternative to Lodash - this is how I do the same with vanilla JS ES6.
const isEmpty = (obj) => {
return obj === undefined ? true : Object.keys(obj).length === 0
}
console.log(isEmpty(undefined))
console.log(isEmpty({}))
Upvotes: 0
Reputation: 1123
_.isEmpty(obj, true)
var obj = {
'firstName': undefined
, 'lastName' : undefined
};
console.log(_.isEmpty(obj)); // false
console.log(_.isEmpty({})); // true
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
Please, see http://www.ericfeminella.com/blog/2012/08/18/determining-if-an-object-is-empty-with-underscore-lo-dash/
Upvotes: 63
Reputation: 236
I guess this is a bit overkill, but this is what I use which recursively checks for nested objects too and uses lodash
.
function checkEmptyObject(obj) {
if (_.isEmpty(obj)) return true;
return _.isEmpty(
Object.entries(obj)
.map(([key, value]) => {
if (_.isEmpty(value)) return true;
if (value instanceof Object) return checkEmptyObject(value);
return false;
})
.filter((b) => b === false)
);
}
Upvotes: 2
Reputation: 493
In your case it cannot be called an empty object (Object.values(obj).length
would return 1), but for a completely empty object this can be used:
import { matches } from 'lodash';
matches(obj, {});
Upvotes: 5
Reputation: 823
It depends on how you want to check it. Do you want to check some or every
Then what you can do is :
import { some, isEmpty } from 'lodash'
console.log(some(this.yourObject, isEmpty))
Upvotes: 12
Reputation: 66404
Your example object is not empty so instead perhaps you want to test if all properties are undefined
let o = {foo: undefined};
!_.values(o).some(x => x !== undefined); // true
Upvotes: 27