[英]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.