如何做到这样代码在没有传递条件后执行函数?

时间:2016-05-18 02:00:37

标签: javascript

以下功能执行以下操作:

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
}

1 个答案:

答案 0 :(得分:2)

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

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循环往往会使代码看起来不那么干净。