2012-01-27 101 views
0

我有以下函數比較兩個二維數組中的第一列值。二維數組比較 - 嵌套for循環錯誤

var new_array = [['EMI_007','lion','cat'], 
       ['EMI_008','cat','dog'] 
       ]; 

var existing_array = [['EMI_002','cat','tiger'], 
        ['EMI_004','hen','pig'], 
        ['EMI_007','pigeon','hen'], 
        ['EMI_001','boar','tiger'] 
       ]; 

在new_array值[I] [0]進行比較,在existing_array [j]的值[0]。

如果它們相同,則整行被替換爲new_array中的行,否則將new_array行連接到現有數組。

在上例中,將new_array與existing_array進行比較。

EMI_007存在於'existing_array'中,所以它被替換爲['EMI_007','lion','cat'],['EMI_008','cat','dog']被追加到現有數組中。

我已經創建了以下功能,但似乎有錯誤。

如果在new_array中找到的具有EMI ID的行在'existing_array'中不存在,則會插入多次。

function concat_2D_array(existing_array, new_array){ 
    for (var i=0; i<new_array.length; i++) { 
     for (var j=0; j<existing_array.length; j++) { 
      if(new_array[i][0] == existing_array[j][0]){ 
      alert("ok,it already exists in the existing_array"); 
      existing_array.splice(j,1,new_array[i]); 
      } 
      else{ 
      alert("It is not in the existing array"); 
      // existing_array.concat(new_array[i]); 
      } 
     } 
    } 
    alert("returned existing_array"+existing_array) 
    return existing_array; 
} 

任何幫助表示最欣賞

回答

1

與您的代碼的主要問題是,你正在嘗試新的項目添加到現有的每一步陣列,並且不退出循環,一旦被添加。

function concat_2D_array(existing_array, new_array){ 
    for (var i=0; i<new_array.length; i++) { 
     var j = 0; 
     while(j<existing_array.length){ 
      if(new_array[i][0] == existing_array[j][0]){ 
       alert("ok,it already exists in the existing_array"); 
       existing_array.splice(j,1,new_array[i]); 
       break; // we found it, replaced it, leaving the loop 
      } else if (j+1 >= existing_array.length){ 
       alert("It is not in the existing array"); 
       existing_array.splice(j+1,0,new_array[i]); 
       break; // we didn't find it, added it, leaving the loop 
      } else { 
       j++; 
      } 
     } 
    } 
    alert("returned existing_array"+existing_array) 
    return existing_array; 
} 
+0

非常感謝。 – tanya 2012-01-27 22:20:05