2015-11-06 77 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()) 
}