Javascript 如何使用lodash isEmpty检查对象是否为空?
我有一个map函数,如果我检查arrayJavascript 如何使用lodash isEmpty检查对象是否为空?,javascript,arrays,angular,lodash,Javascript,Arrays,Angular,Lodash,我有一个map函数,如果我检查array\u isEmpty这个条件应该满足,但是它没有进入if语句,那么现在就返回数组的空对象。你知道什么是错误的或更好的方法吗 main.js const validateResponse = _.map(drugs ,validateValues); 现在validateResponse返回[{}],它应该满足条件 if (_.isEmpty(validateResponse)) { throw invalidPriceError;
\u isEmpty
这个条件应该满足,但是它没有进入if语句,那么现在就返回数组的空对象。你知道什么是错误的或更好的方法吗
main.js
const validateResponse = _.map(drugs ,validateValues);
现在validateResponse返回[{}],它应该满足条件
if (_.isEmpty(validateResponse)) {
throw invalidPriceError;
}
您必须压缩内部构件或检查更深一层:
if (!validateResponse.filter(r => !_.isEmpty(r)).length){
throw invalidPriceError;
}
根据lodash文件: 类似数组的值(如参数对象、数组、缓冲区、字符串或类似jQuery的集合)如果长度为0,则视为空。类似地,如果贴图和集的大小为0,则将其视为空
[{}]。长度正好是1。一盒卷心菜,如果你愿意的话。包含一个空对象的数组。因此,isEmpty的计算结果为false<代码>[]另一方面,长度等于0。可能还有一些其他情况需要处理,如空数组或两个空对象的数组等。以下内容的变体应满足您的需要
let数组=[{}];
//包含任何空对象
log(0.some(数组,0.isEmpty))
//仅包含空对象
log(0.every(数组,0.isEmpty))
//只包含一个空对象
console.log(0.every(array,0.isEmpty)和&array.length==1)
如果您只想检查是否有一个数组包含一个空对象[{}]
,您可以使用:
const haspempty=arr=>..isEqual(arr,[{}])
console.log(hasEmpty([])//false
log(hasEmpty([{}])//true
log(hasEmpty([{},{}])//false
log(hasEmpty([{a:1}])//false
由于数组实际上并不是空的,但您真正要检查的是“数组是否只有一个值,并且单个值是否为空对象?”,因此您可以执行以下检查:
if (validateResponse.length === 1 && _.isEmpty(validateResponse[0])) {
throw invalidPriceError;
}
因此,如何检测[{}]
的问题也是如此?@danh这是正确的。有些(validateResponse,isEmpty)
似乎很接近,但不确定您希望如何处理长度数组!=1直到未计算为真我将逻辑倒置,用修复代码>。好的,有意义,那么在这个用例中我如何检查这样的数组呢?我的答案基于这个问题的标题。听起来你不需要像现在这样的解决方案。我建议更新问题的标题。或者,如果可能的话,可以用\u isEmpty
视为空的内容填充验证响应
。也许这有助于检测空对象,这里有一个问题: