我有一个检查一些参数并相应地返回true / false的函数。
我的问题是它返回true(最后一个console.log(return 1)
),但是当我再次调用此函数并到达console.log(return 2)
或undefined
时,该函数仅执行控制台.log(),然后返回true
而不是false
或.map()
。我的假设是除非它运行完毕,否则不允许它从isFlashingUnderscore() {
let count = 0;
if (!_.isEmpty(this.currentElement.value)) {
_.map(Object.keys(this.currentElement.value), key => {
count++
if (this.currentElement.value[key].object_type == 'date_range') {
return false;
} else if (this.currentElement.value[key].object_type == 'date') {
if (count >= 2) {
console.log('return 1');
return false;
} else {
console.log('return 2');
return true;
}
} else {
return true;
}
})
} else {
console.log('returns this true')
return true;
}
}
返回?
{{1}}
答案 0 :(得分:2)
不是您实际问题的答案,但是您的代码可以简化。在return
之后,该函数的其余部分将不会执行。您可以利用它:
isFlashingUnderscore(){
let count = 0;
if(!_.isEmpty(this.currentElement.value)){
_.map(Object.keys(this.currentElement.value), key => {
count++
if (this.currentElement.value[key].object_type == 'date_range'){
return false;
}
if(this.currentElement.value[key].object_type == 'date'){
return false;
}
if (count >= 2) {
return false;
}
})
}
return true;
}
通过简化它,了解正在发生的事情以及您不希望发生的事情变得容易得多。
答案 1 :(得分:1)
因此,在您的if块if(!_.isEmpty(this.currentElement.value)){
中
你什么也没返回。您只是在调用地图而没有返回任何内容。
我不确定您要使用该地图做什么,也许检查每个值是否正确,也许检查至少一个值。不确定。 map函数内的返回值是针对lambda的,这意味着您要为该map内的每次迭代返回一些内容。
假设您要在每个值都为true时返回true,则您需要这样的东西:
return _.map(Object.keys(this.currentElement.value), key => {
count++
if (this.currentElement.value[key].object_type == 'date_range') {
return false;
} else if (this.currentElement.value[key].object_type == 'date') {
if (count >= 2) {
console.log('return 1');
return false;
} else {
console.log('return 2');
return true;
}
} else {
return true;
}
}).every(a=>a);
答案 2 :(得分:0)
please Try this
isFlashingUnderscore(){
let count = 0;
if(!_.isEmpty(this.currentElement.value)){
var returnVal = _.map(Object.keys(this.currentElement.value), key => {
count++
if (this.currentElement.value[key].object_type == 'date_range'){
return false;
}else if(this.currentElement.value[key].object_type == 'date'){
if(count >= 2){
console.log('return 1');
return false;
}else{
console.log('return 2');
return true;
}
}else{
return true;
}
})
if(returnVal){
return true;
}else{
return false;
}
}else{
console.log('returns this true')
return true;
}
}
答案 3 :(得分:-1)
尝试:
isFlashingUnderscore(){
let count = 0;
if(!_.isEmpty(this.currentElement.value)){
_.map(Object.keys(this.currentElement.value), key => {
count++
if (this.currentElement.value[key].object_type == 'date_range'){
return false;
}else if(this.currentElement.value[key].object_type == 'date'){
if(count >= 2){
console.log('return 1');
return false;
}else{
console.log('return 2');
return true;
}
}else{
return true;
}
})
return false;
}else{
console.log('returns this true')
return true;
}
}