如何做到这一点,使代码在不传递条件后执行函数

How to do it so the code executes down the function after not passing a condition?

本文关键字:条件 函数 执行 何做 这一点 代码      更新时间:2023-09-26

以下函数执行以下操作:

1) 检查对象是否具有非空类别(具有特定名称的键)。

2) 检查这些类别中的每个对象。如果对象具有属性web,并且该属性不为空或未定义,则返回false

3) 最后一位执行相同的操作,但当属性web在对象中而不在类别中时。

hasNoCategories (object) {
  for (let key in object) {
    const value = object[key]
    const isCategory = this.categories.indexOf(key) > -1
    if (value.constructor === Array && isCategory && value.length > 0) {
      let result
      value.map(pano => {
        if (pano.web !== undefined && pano.web !== '') {
          result = false
        }
      })
      // STUCK HERE
      return result
    }
    if (key === 'web' && value !== '') {
      return false
    }
  }
  return true
},

然而,当代码有时在// STUCK HERE中停止,并且在结束时从不返回true时。

一个解决方法是:

if (pano.web !== undefined && pano.web !== '') {
  result = false
} else {
  result = true
}

但我反对有两个return true,我觉得这有点混乱逻辑(我只想有一个return true,最后一个。)

如何修改代码,使代码不会卡在// STUCK HERE中,并一直持续到到达return true

编辑:

样本输入:

{
  "livingroom": [],
  "diningroom": [],
  "kitchen": [],
  "bedroom": [],
  "study": [],
  "bathroom": [],
  "toilet": [],
  "garden": [],
  "garage": [],
  "outdoors": [],
  "other": [],
  "id": "ZI4hteKxgr",
  "name": "Cuiti",
  "description": "",
  "visible": true,
  "user": "",
  "floorplan": "",
  "shareCode": "http://vrviewer.istaging.co#!/854703",
  "date": "2016/5/13",
  "isDirty": false
}

这是使用for循环而不是第一个if语句的map来执行此操作的示例。

hasNoCategories (object) {
  for (let key in object) {
    const value = object[key]
    const isCategory = this.categories.indexOf(key) > -1
    if (value.constructor === Array && isCategory && value.length > 0) {
      for (let i = 0, len = value.length; i < len; i++) {
        let pano = value[i]
        if (pano.web !== undefined && pano.web !== '') {
          return false
        }
      }
    }
    if (key === 'web' && value !== '') {
      return false
    }
  }
  return true
}

不过,这可能可以用一种更干净的方式来完成。我认为for循环往往会使代码看起来不那么干净。