Lodash: 检查对象是否为空

44

我有这个对象:

{"": undefined}

当我以如下方式检查是否为空时:

_.isEmpty({"": undefined})

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


8
你为什么认为这个对象是空的?它有一个有效的键。 - thefourtheye
8
FYI,{}代表一个空对象。 - MForMarlon
8个回答

58

嗨@Deano。有什么问题吗? - Armen Zakaryan
63
缺乏清晰度会被扣分。未来的读者请注意,isEmpty函数需要传入第二个参数。查看lodash文档只会让你更加困惑。只有在编写自己的混合函数并将其应用于isEmpty时,才能使用此功能。这个答案应该明确说明如何做到这一点。阅读链接的博客文章以获取更多细节。 注:混合函数(mixin)是指将一个对象的方法添加到另一个对象上,以使添加后的对象获得原始对象的功能。 - kumarharsh

26

您的示例对象不是,因此也许您想测试所有属性是否未定义

let o = {foo: undefined};
!_.values(o).some(x => x !== undefined); // true

9

这取决于您想要如何检查它。 您是想要检查 some 还是 every

那么您可以这样做:

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

5

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

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

3
我会这样做
_.isEmpty(_.omitBy(object_to_check, _.isNil)

在这个例子中,_.omitBy会删除所有具有null和undefined值的键。如果只想删除undefined值,可以使用_.isUndefined代替_.isNil


2

我想这可能有点过头了,但这是我使用的方法,它可以递归检查嵌套对象,并使用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)
  );
}

0
为了提供一个替代 Lodash 的方案 - 这是我如何使用原生 JS ES6 实现相同的功能。

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

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


遗憾的是,如果obj确实是null,这种方法会抛出一个错误。("TypeError: Cannot convert undefined or null to object") - undefined

0

试一试这个

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接