for语句中的循环javascript无法按预期工作

时间:2017-04-18 22:23:52

标签: javascript reactjs for-loop

这段代码背后的想法非常简单,只需点击一下按钮,插入一个假值(如果不存在),为此,我创建了for循环,检查存在多少假值,如果它们比插入假值小于1,否则什么都不做

这是代码

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

1 个答案:

答案 0 :(得分:0)

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

  

如果它们小于1,则插入假值,否则不执行任何操作

这不是你的代码在做什么。如果任何条目具有display: true,则代码会插入新值。由于第一个元素具有该元素,因此您的代码总是添加一个新条目。

以下代码可以执行您想要的操作(而不是循环):

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

转换为&#34;如果没有display === false的元素添加新元素。