JS,函数返回undefined而不是true或false

时间:2019-11-20 15:32:17

标签: javascript

我有一个检查一些参数并相应地返回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}}

4 个答案:

答案 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;
    }
  }