【问题标题】:lodash: check object is emptylodash:检查对象是否为空
【发布时间】:2016-05-30 10:59:12
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么你认为对象是空的?它有一个有效的密钥。
  • 仅供参考,{} 是一个空对象。

标签: javascript lodash


【解决方案1】:
_.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/

【讨论】:

  • 嗨@Deano。有什么问题。
  • -1 不够清晰。未来的读者:请注意 isEmpty 接受任何第二个参数。为此咨询 lodash 的文档只会让您更加困惑。只有当您编写自己的 mixin 并将其应用于 isEmpty 时,此功能才会出现。这个答案应该真正说明这是如何发生的。阅读链接的博客文章了解更多详情。
【解决方案2】:

您的示例对象 不是为空,因此您可能想测试所有属性是否未定义

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

【讨论】:

    【解决方案3】:

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

    那么你可以做的是:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-08-19
            • 1970-01-01
            • 1970-01-01
            • 2017-12-11
            • 1970-01-01
            • 1970-01-01
            • 2013-10-11
            • 2014-01-01
            相关资源
            最近更新 更多