我有一个看起来像这样的对象:
objectProp = {
property1: [],
property2: [],
}
我想检查该对象是否为所有属性(即字符串数组)是否为null并返回true。 我出于某种原因陷入困境。我怎样才能做到这一点? 我正在使用“ target”:“ es2015”
我尝试了此方法,但不起作用:
if (!Object.keys(this.objectProp).every(array => array.length > 0)) {
console.log('all are empety');
}
答案 0 :(得分:5)
要使用此功能,您需要使用Object.values(this.objectProp)
而不是Object.keys(this.objectProp)
。由于Object.keys
方法返回给定对象自己的可枚举属性名称的数组,而Object.values
方法返回给定对象自己的可枚举属性值的数组,这实际上是您要查找的内容。
let objectProp = {
property1: [],
property2: [],
}
console.log(Object.keys(objectProp))
console.log(Object.values(objectProp))
对于Es2015,您可以尝试以下操作:
let obj = {
property1: [],
property2: [],
}
// Log is print only when all arrays are empty
if (Object.keys(obj).map(e => obj[e]).every(a => a.length === 0)) {
console.log('all are empty');
}
答案 1 :(得分:3)
通过使用Object.keys()
,您可以按照以下步骤进行操作
var objectProp = {
property1: [],
property2: [],
}
if(Object.keys(objectProp).every(key => objectProp[key] && objectProp[key].length === 0)){
console.log('All is empty')
}
答案 2 :(得分:2)
您应按以下方式使用Object.values
:
if (!Object.values(this.objectProp).every(({length}) => Boolean(length))) {
console.log('all are empety');
}
答案 3 :(得分:0)
大多数答案似乎都遗漏了有关您的逻辑有些错误的部分。
如果只有单个项目为空,他们会说为空。
这是因为逻辑为AsyncIOExecutor
但是,将此逻辑切换为!every > 0
将得到您想要的。
例如
下面的示例将为损坏的版本返回every <= 0
。
但是true, true
是固定的。
true, false