以下功能执行以下操作:
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
}
答案 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
循环往往会使代码看起来不那么干净。