这段代码背后的想法非常简单,只需点击一下按钮,插入一个假值(如果不存在),为此,我创建了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
答案 0 :(得分:0)
如果两个if
语句都在循环内,那么每次调用 addNote
时,都会向数组添加一个新条目。这是因为j
在循环的第一次迭代中始终为0
,并且因为note[0].display
为true
,所以它保持0
。
当然if (j==0)
是true
,向数组中添加一个新元素。
换句话说,您决定是否通过单独查看每个元素来添加新条目,而不是一起查看。
如果它们小于1,则插入假值,否则不执行任何操作
这不是你的代码在做什么。如果任何条目具有display: true
,则代码会插入新值。由于第一个元素具有该元素,因此您的代码总是添加一个新条目。
以下代码可以执行您想要的操作(而不是循环):
if (!note.some(item => item.display === false)) {
note.push({display:false});
}
转换为&#34;如果没有display === false
的元素添加新元素。