2015-11-06 150 views
0

我想做一個for循環,如果值的0將更改爲1如果前兩個值中的任何一個匹配數組中的前一行。多維數組for循環javascript

因此,例如,行2和行3將具有0值變化到1,因爲行1具有13,它匹配行2中的兩個值中的一個和3

值在這種情況下,所有值0將最終全部更改爲1(因爲第4行將具有第2行和第3行的值)。

我該如何創建這樣一個循環?

edgeArray=[[1,3,0], 
      [1,4,0], 
      [2,3,0], 
      [2,4,0]] 

for(var counter = 1; counter =< edgeArray.length; counter ++ { 
    if current edgeArray[i][j][0] && previous edgeArray[i][j][0] on same row && edgeArray[i][j][0] == 
then edgeArray[i][j][0] = edgeArray[i][j][1] 

最終的結果是

edgeArray=[[1,3,0], 
     [1,4,1], 
     [2,3,1], 
     [2,4,1]] 
+1

能告訴你會在邊界陣列的結果是什麼呢? – juvian

+1

您是否在同時進行更改?在中,你在修改數組的同時迭代它,所以對前一行的更改會影響下一個的結果?或者,您是否按照原樣使用當前行的值,而不依賴於前一行的更改並創建新數組? – nem035

+0

@nem它實際上是鏈接到按鈕。數組中的值是按鈕的連接方式。即按鈕1和按鈕3被鏈接,按鈕1和按鈕4被鏈接等。因此當有人點擊連接按鈕時,[0]值變爲[1]。從某種意義上說,前兩行值不會改變,只有最後一行會改變。 – Sam

回答

2

不知道我完全理解,但是這是你想要什麼?

for(var i = 1; i <= edgeArray.length; i ++) { 
    // for each row (from second row onwards) 
    if ( edgeArray[i][0] == edgeArray[i-1][0] 
      // is the first val the same as prev row? 
     || edgeArray[i][1] == edgeArray[i-1][1] 
      // or second val same as prev row? 
     || edgeArray[i-1][2] == 1) { 
      // or is there already a '1' in 3rd col of prev row? 
     edgeArray[i][2] = 1; 
      // in that case change 3rd column to '1' 
    } 
} 

如果你不想「扛過」以前1 s到未來行,只是想和你的第三列只反映前兩排,然後剛剛擺脫第三析取條件在if語句中。

+1

這會拋出一個錯誤,應該是 juvian

+0

謝謝,我的錯誤,我沒有測試它.... –

1

不知道我理解你的要求,但是這會導致你想要的方式:

var edgeArray = [[1,3,0], 
       [1,4,0], 
       [2,3,0], 
       [2,4,0]]; 

var temp = [[],[]]; 

for(var i=0; i<edgeArray.length; i++){ 
    for(var j=0; j<2; j++){ 
     var found = temp[j].indexOf(edgeArray[i][j]); 
     if(found > -1){ 
      edgeArray[i][2] = 1; 
     }else{ 
      temp[j].push(edgeArray[i][j]); 
     } 
    } 
    console.log(edgeArray[i].toString()) 
}