我有map函数,如果我检查数组_isEmpty
,此条件应满足但不进入if语句,现在该函数将为该数组返回空对象。任何想法错误或更好的方法是什么?
main.js
const validateResponse = _.map(drugs ,validateValues);
现在validateResponse返回[{}],它应该满足条件
if (_.isEmpty(validateResponse)) {
throw invalidPriceError;
}
答案 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;
}