Javascript 如何使代码在未传递条件后向下执行函数?
以下函数执行以下操作: 1) 检查对象是否具有非空类别(具有特定名称的键) 2) 检查这些类别中的每个对象。如果对象具有属性Javascript 如何使代码在未传递条件后向下执行函数?,javascript,Javascript,以下函数执行以下操作: 1) 检查对象是否具有非空类别(具有特定名称的键) 2) 检查这些类别中的每个对象。如果对象具有属性web,且属性不为空或未定义,则返回false 3) 最后一位执行相同的操作,但当属性web位于对象中而不在类别中时 hasNoCategories (object) { for (let key in object) { const value = object[key] const isCategory = this.categories.index
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
},
但是,当代码有时停在//卡在这里
,并且永远不会在结尾返回true
解决办法之一是:
if (pano.web !== undefined && pano.web !== '') {
result = false
} else {
result = true
}
但是我反对让两个返回true
,我觉得这有点混乱逻辑(我只想让一个返回true
,最后一个。)
如何修改代码,使代码不会卡在//卡在此处
并一直持续到达到返回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
循环而不是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
}
hasnotegories(对象){
for(让输入对象){
常量值=对象[键]
const isCategory=this.categories.indexOf(key)>-1
if(value.constructor==Array&&isCategory&&value.length>0){
for(设i=0,len=value.length;i
不过,这可能是一种更干净的方式。我认为
for
循环往往会使代码看起来不那么干净。这是使用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
}
hasnotegories(对象){
for(让输入对象){
常量值=对象[键]
const isCategory=this.categories.indexOf(key)>-1
if(value.constructor==Array&&isCategory&&value.length>0){
for(设i=0,len=value.length;i
不过,这可能是一种更干净的方式。我认为
for
循环会使代码看起来不那么干净。当到达返回时,函数停止。在第一个if
语句中读取和,如果result
没有变为false
,则返回undefined
,函数结束时与前面提到的@zer00ne类似。@DonovanM那么如何才能恢复,使函数在返回undefined
时不结束?同样,当使用let
时,您将键的范围限制为用于循环。如果希望使用键返回true,请尝试var
。阅读本文。我相信这就是您的变通方法之所以有效的原因,因为它在键的范围内。当您到达返回值时,函数停止。在第一个if
语句中读取和,如果result
没有变为false
,则返回undefined
,函数结束时与前面提到的@zer00ne类似。@DonovanM那么如何才能恢复,使函数在返回undefined
时不结束?同样,当使用let
时,您将键的范围限制为用于循环。如果希望使用键返回true,请尝试var
。读这篇文章。我相信这就是你的变通方法之所以有效的原因,因为它在key
的范围内。是的,我同意。我想不出一种不使用for loop
s思想的方法是的,我同意。不过,我想不出一种不使用for loop
s的方法