检查TypeScript对象的属性是否全部为空

时间:2020-02-25 14:36:05

标签: javascript arrays typescript object ecmascript-6

我有一个看起来像这样的对象:

objectProp = {
  property1: [],
  property2: [],
}

我想检查该对象是否为所有属性(即字符串数组)是否为null并返回true。 我出于某种原因陷入困境。我怎样才能做到这一点? 我正在使用“ target”:“ es2015”

我尝试了此方法,但不起作用:

 if (!Object.keys(this.objectProp).every(array => array.length > 0)) {
      console.log('all are empety');
    }

4 个答案:

答案 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