2017-04-18 121 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元素添加新元素