【问题标题】:loop won't go through first if statement循环不会通过第一个 if 语句
【发布时间】:2019-01-05 02:16:56
【问题描述】:

我的代码只会执行第一个 if 语句,它检查标题 1 的键值等...不是真的。我已将第二个语句切换到第一个检查“desc1”的语句,然后它仅适用于该语句。

此函数的目的是检查对象的每个键并在其值超过一定长度时返回该键,以便我可以添加一个类并向用户显示一些警告。这是在 Vue JS 中,所以 ads 在数据中,而 characterCheck 在计算属性中。

ads: [
  {
    headline1: '_keyword_',
    headline2: 'Online',
    headline3: 'Free',
    desc1: 'Buy online _keyword_',
    desc2: ' Vast collection of _keyword_',
    finalurl: 'www.books.com',
    path1: '',
    path2: '',
    boolean: true
  }
]

characterCheck () {
  for(var x = 0; x < this.ads.length; x++){
    if(this.ads[x]['boolean'] == true) {
      for(var key in this.ads[x]){
        var length = this.ads[x][key].replace(/_keyword_/g, this.activeKeyword).length
        if( key === 'headline1' || key === 'headline2' || key === 'headline3'){
          if(length > 30){
            return key
          }
        } else if( key == 'desc1' || key == 'desc2'){
          if(length > 90){
            return key
          }
        } else if( key == 'path1' || key == 'path2'){
          if(length > 15){
            return key
          }
        } else {
          return false
        }
      }
    }
  }
}

【问题讨论】:

  • 这里有很多分支没有解决。你知道哪些被处决了吗?考虑明确地写出每一个,这样你就可以准确地确定正在遵循的路径。还要考虑提供样本输入和预期结果...
  • 您第一次使用三等号,随后使用普通等号。故意的?
  • @tehhowch 一切正常,直到设置“var length”后的 if 语句。它循环遍历设置为 true 的广告,会有多个广告,只有一个会设置为 true,这就是它首先检查该值的原因。第一个 if 语句正常工作,它检查键是否为 'headline1' 'headline2' 'headline3' 但当它为假并且我希望键为 'desc1' 'desc2' 或任何其他键时 if 语句不会评估。我切换了 if 语句以缩小问题范围并首先检查 key== 'desc1' 或 key == 'desc2' ,然后突然就可以了。
  • 我第一次尝试了三次等于,只是为了看看是否出于某种原因可以解决问题。只是在这里变得绝望哈哈@another-dave
  • 至于它应该返回什么,此时我只想返回一个键的值的长度超过某个字符限制的键,这就是 if 语句的作用。

标签: javascript vue.js


【解决方案1】:

当您的第一个嵌套if 条件失败时,代码将转到下一个后续else-if。对于某些特定值,所有 ifelse-if 块都会失败,代码会落在包含 return 语句的最终 else 块上。

如果您的代码甚至到达那里一次,整个函数执行会立即停止并返回false 值。

既然您希望等待,只要您没有遍历所有值,请删除 else 部分并在 for 循环的末尾添加一个简单的 return 语句,如下所示:

function characterCheck () {
    for(var x = 0; x < this.ads.length; x++) {
        if(this.ads[x]['boolean'] == true) {
            for(var key in this.ads[x]) {
                var length = this.ads[x][key].replace(/_keyword_/g, this.activeKeyword).length
                if( key === 'headline1' || key === 'headline2' || key === 'headline3') {
                    if(length > 30) {
                        return key
                    }
                } 
                else if( key == 'desc1' || key == 'desc2') {
                    if(length > 90) {
                        return key
                    }
                } else if( key == 'path1' || key == 'path2') {

                    if(length > 15) {
                        return key
                    }
                }
            }
        }
    }

    return false
}

【讨论】:

  • 你明白了!谢谢! @harshalpatil
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多