lodash:检查对象是否为空

lodash: check object is empty

我有这个对象: {"": undefined}

当我以这种方式检查此对象是否为空时: _.isEmpty({"": undefined})

我得到了 false 结果,也许在 lodash 中我们有另一种方法?

您的示例对象 不是 所以也许您想测试所有属性是否 undefined

let o = {foo: undefined};
!_.values(o).some(x => x !== undefined); // true
_.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>

请参阅http://www.ericfeminella.com/blog/2012/08/18/determining-if-an-object-is-empty-with-underscore-lo-dash/

这取决于你想如何检查它。 你想检查some or every

那么你可以做的是:

import { some, isEmpty } from 'lodash'
console.log(some(this.yourObject, isEmpty))

在您的情况下,它不能称为空对象(Object.values(obj).length 会 return 1),但对于完全空的对象,可以使用:

import { matches } from 'lodash';
matches(obj, {});

我想这有点矫枉过正,但这就是我使用的递归检查嵌套对象并使用 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)
  );
}

提供 Lodash 的替代品 - 这就是我使用 vanilla JS ES6 做同样事情的方式。

const isEmpty = (obj) => {
    return obj === undefined ? true : Object.keys(obj).length === 0
}

console.log(isEmpty(undefined))
console.log(isEmpty({}))