【问题标题】:for loop in if statement javascript not working as expectedif语句javascript中的for循环未按预期工作
【发布时间】:2017-04-18 22:23:52
【问题描述】:

这段代码背后的想法很简单,当有人单击按钮时,如果不存在则插入一个假值,为此,我创建了 for 循环,它检查存在多少假值,如果它们小于一而不是插入错误值,否则什么也不做

这里是代码

addNote(index){
    const order = this.state.order
    var j =0;
    const note=order[index].note
    for(var i =0; i<note.length; i++){
        if(note[i].display===false){j++;}
        if(j==0){note[note.length]={display:false}}
        console.log(j)
    }
    console.log(note)
    this.setState({order:this.state.order}) 
}

如果您看到控制台日志结果,则每次单击都会增加 j 的值,而不是为什么我的 if 语句对每次单击都有效,它应该仅在 j 的值为零时才有效,我说的是这个线if(j==0){note[note.length]={display:false}}

这里是点击前的数组

0:Object
        display:true
        note:"jhj"

第二次点击后的数组

0:Object
        display:true
        note:"jhj"
    1:Object
        display:false

第二次点击后的数组

 0:Object
    display:true
    note:"jhj"
1:Object
    display:false
2:Object
    display:false

【问题讨论】:

  • 您的代码有语法错误。是不是少了什么东西?
  • "Uncaught SyntaxError: Unexpected token }" 在第一个 if 语句之后还有第二个 }。这应该属于哪里?它应该关闭循环体吗?第二个if 语句应该在循环内部还是外部?如果两个if 语句都在循环内,则行为很容易解释:在第一次迭代中j 将始终为0。因此if (j==0)true 并且一个新对象被添加到数组中。换句话说,在您决定添加条目之前,您不会查看 所有 条目。您只查看第一个条目。

标签: javascript reactjs for-loop


【解决方案1】:

如果两个if 语句都在循环内,那么您将在数组中添加一个新条目每次 addNote 被调用。这是因为j 在循环的第一次迭代中始终是0,并且因为note[0].displaytrue,所以它保持0。 那么if (j==0)当然是true,向数组中添加一个新元素。 换句话说,您是通过单独查看每个元素而不是一起查看来决定是否添加新条目。

如果它们小于 1,则插入 false 值,否则什么也不做

这不是您的代码正在做的事情。如果 any 条目具有 display: true,您的代码将插入一个新值。由于第一个元素具有该元素,因此您的代码总是会添加一个新条目。

下面的代码会做你想做的事(而不是循环):

if (!note.some(item => item.display === false)) {
  note.push({display:false});
}

这意味着“如果没有带有display === false 的元素,则添加一个新元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-06
    • 2020-03-15
    • 2020-03-11
    • 1970-01-01
    • 2020-11-28
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多