2017-04-18 80 views
0

这个代码背后的想法很简单,当一个人点击按钮,插入一个假值,如果它不存在,要做到这一点,我创建了for循环,该检查假值存在多少,如果他们是一个其小于插入别的假值无可奈何for循环if语句javascript不按预期工作

这里是代码

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" 
1:Object 
    display:false 
2:Object 
    display:false 
+0

您的代码语法错误。是否有东西丢失? –

+1

*“Uncaught SyntaxError:Unexpected token}”*在第一个'if'语句后面有第二个'}'这个属于哪里?是否应该关闭循环体?第二个if语句应该在循环内部还是外部?如果两个if语句都在循环内部,这个行为很容易解释ed:在第一次迭代中'j'将总是'0'。因此'if(j == 0)'是'true'并且新的对象被添加到数组中。换句话说,在决定添加条目之前,您并没有看*全部*条目。您只查看第一个条目。 –

回答

0

如果两个if陈述里面的

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

阵列

0:Object 
     display:true 
     note:"jhj" 

阵列的任何点击前阵循环,那么你将添加一个新的条目到数组每次调用addNote。这是因为j在循环的第一次迭代中总是0,并且因为note[0].displaytrue,所以它保持0。 那么当然if (j==0)true,添加一个新的元素到数组中。 换句话说,您正在通过单独查看每个元素来决定是否添加新条目,而不是一起查看。

if they are less than one than insert the false value else do nothing

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

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

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

转换为“如果没有与display === false元素添加新元素