簡體   English   中英

檢查 TypeScript 對象的屬性是否全部為空

[英]Check if properties of a TypeScript object are all empty

我有一個看起來像這樣的對象:

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

我想檢查所有屬性(即字符串數組)是否為空並返回 true。 我因為某種原因被卡住了。 我怎樣才能做到這一點? 我正在使用“目標”:“es2015”

我試過這個但不起作用:

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

您需要使用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'); }

通過使用Object.keys()你可以做如下

 var objectProp = { property1: [], property2: [], } if(Object.keys(objectProp).every(key => objectProp[key] && objectProp[key].length === 0)){ console.log('All is empty') }

您應該使用Object.values如下:

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

大多數答案似乎都錯過了關於您的邏輯略有錯誤的部分。 他們會說空,如果只有一個項目是空的,。 這是因為邏輯是!every > 0但是將此邏輯切換到every <= 0將得到您想要的。

例如。

下面的示例將返回true, true對於損壞的版本true, true則為true, true 但是對於固定的來說是true, false的。

 var objectProp = { property1: [], property2: [], }; var objectProp2 = { property1: [], property2: [], property3: ['not empty'] }; function allIsEmptyBroken(objectProp) { return (!Object.keys(objectProp).every(key => objectProp[key] && objectProp[key].length > 0)); } function allIsEmptyFixed(objectProp) { return (Object.keys(objectProp).every(key => objectProp[key] && objectProp[key].length <= 0)); } console.log('allIsEmptyBroken'); console.log(allIsEmptyBroken(objectProp)); console.log(allIsEmptyBroken(objectProp2)); console.log('allIsEmptyFixed'); console.log(allIsEmptyFixed(objectProp)); console.log(allIsEmptyFixed(objectProp2));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM