如何使用lodash _isEmpty检查对象是否为空?

时间:2019-07-09 16:03:53

标签: javascript arrays angular lodash

我有map函数,如果我检查数组_isEmpty,此条件应满足但不进入if语句,现在该函数将为该数组返回空对象。任何想法错误或更好的方法是什么?

main.js

const validateResponse = _.map(drugs ,validateValues);

现在validateResponse返回[{}],它应该满足条件

  if (_.isEmpty(validateResponse)) {
      throw invalidPriceError;
    }

5 个答案:

答案 0 :(得分:0)

您必须精简内部结构或更深入地检查一级:

---- parse::tests::test_upper_string_ok stdout ----
[src/parse.rs:110] &output = Err(
    Error(
        VerboseError {
            errors: [
                (
                    "",
                    Nom(
                        Many1,
                    ),
                ),
            ],
        },
    ),
)
thread 'parse::tests::test_upper_string_ok' panicked at 'assertion failed: `(left == right)`
  left: `Err(Error(VerboseError { errors: [("", Nom(Many1))] }))`,
 right: `Ok(("ADAM", ""))`', src/parse.rs:112:9
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

答案 1 :(得分:0)

根据lodash文档here

  

类似数组的值(例如参数对象,数组,缓冲区,字符串或类似jQuery的集合)如果长度为0,则视为空。类似地,如果映射和集合的大小为0,则视为空。

[{}].length恰好是1。如果愿意,可以装一盒白菜。具有一个空对象的数组。因此,isEmpty评估为false。另一方面,[].length等于0。

答案 2 :(得分:0)

您可能还需要处理其他几种情况,例如空数组或两个空对象的数组,等等。以下内容的变化应该可以满足您的需求...

let array = [{}];
// contains any empty object
console.log(_.some(array, _.isEmpty))

// contains only empty objects
console.log(_.every(array, _.isEmpty))

// contains exactly one empty object
console.log(_.every(array, _.isEmpty) && array.length == 1)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.js"></script>

答案 3 :(得分:0)

如果您只想检查单个数组是否包含单个空对象[{}],则可以使用_.isEqual

const hasEmpty = arr => _.isEqual(arr, [{}])

console.log(hasEmpty([])) // false
console.log(hasEmpty([{}])) // true
console.log(hasEmpty([{}, {}])) // false
console.log(hasEmpty([{ a: 1 }])) // false
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

答案 4 :(得分:0)

由于数组实际上不是空的,但是您真正要检查的是“该数组是否只有一个值,而单个值是否是一个空对象?”,您可以执行以下检查:

if (validateResponse.length === 1 && _.isEmpty(validateResponse[0])) {
      throw invalidPriceError;
    }