Meldum
Meldum

Reputation: 659

lodash: check object is empty

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

Answers (8)

Amr Omar
Amr Omar

Reputation: 555

try this one

_.omitBy(
            obj,
            (v) =>
                _.isUndefined(v) ||
                _.isNull(v) ||
                v === '' ||
                (v && v instanceof Object && Object.keys(v).length === 0)
        );

Upvotes: -1

Zephyr
Zephyr

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

Hexodus
Hexodus

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

Armen Zakaryan
Armen Zakaryan

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

soulphoenix
soulphoenix

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

truefusion
truefusion

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

pkerckhove
pkerckhove

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

Paul S.
Paul S.

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

Related Questions