【问题标题】:Check if properties of a TypeScript object are all empty检查 TypeScript 对象的属性是否全部为空
【发布时间】:2020-02-25 14:36:05
【问题描述】:

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

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

如果此对象为空并返回真,我想检查是否所有属性(即字符串数组)。 我由于某种原因被卡住了。我怎样才能做到这一点? 我正在使用“目标”:“es2015”

我试过了,但没有用:

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

【问题讨论】:

标签: javascript arrays typescript object ecmascript-6


【解决方案1】:

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

【讨论】:

  • 这将是一个不错的解决方案,但我使用的是 "target": "es2015"
  • 你可以使用简单的polyfill然后提到here
  • @KathrineHanson 不要在写完答案后将其添加到每个答案中,请编辑您的问题并将其添加到那里...
【解决方案2】:

通过使用Object.keys(),您可以按照以下方式进行操作

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

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

【讨论】:

  • 这将是一个不错的解决方案,但我使用的是 "target": "es2015"
  • 按您的要求更新
  • 轻微的逻辑错误,但OP对每个都做了同样的!Object.value和>0,这意味着如果一个不为空,它将打印All is empty,..应该是@ 987654326@ & <=0 与每个。或者替代!还有一些。
  • 我想你不明白我想要什么。我想检查对象的所有属性是否为空。不只是如果只有一个是空的,而是全部。
  • @Keith 你说得对,它不起作用,但你写它的方式我不明白。你能写完整吗?谢谢。
【解决方案3】:

您应该使用Object.values,如下所示:

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

【讨论】:

  • 这将是一个不错的解决方案,但我使用的是 "target": "es2015"
【解决方案4】:

大多数答案似乎都错过了关于您的逻辑略有错误的部分。 他们会说空的,如果只有一个项目是空的,。 这是因为逻辑是!every > 0 但是将这个逻辑切换到every <= 0 会得到你想要的。

例如。

以下示例将为损坏的版本返回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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2020-09-21
    • 1970-01-01
    • 2022-12-08
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多