2012-01-27 8 views
0

2つの2D配列の最初の列の値を比較する次の関数があります。2D配列の比較 - ループエラーのネストされた

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