二つの配列の差分をチェックする
古い配列のデータと新しい配列のデータを比較して、その差分をとるプログラムをjavascriptで書くことになりまして。
先輩社員の方に良い方法がないか聞いたらこんなプログラムが。
<script language="JavaScript" type="text/javascript"><!-- var a = [1,2,3,4,5,9,10,12,13]; // array a var b = [1,3,4,5,6,7,8,9,12]; // array b var u = []; // elements exist in a only var v = []; // elements exist int both a and b var w = []; // elements exist in b only var i = 0; var j = 0; while ( i < a.length && j < b.length ){ if ( a[i] < b[j] ) { u.push(a[i]); i++; } else if ( a[i] > b[j] ) { w.push(b[j]) j++; } else { // a[i] == b[j] v.push(a[i]); i++; j++; } } if ( i == a.length ) { for ( ; j < b.length; j++ ) { w.push(b[j]); } } if ( j == b.length ) { for ( ; i < a.length; i++ ) { u.push(a[i]); } } alert(u); alert(w); alert(v); //--></script>
二つの配列の値がユニーク且つ同じ条件でソートされているのが前提ですよ。
aとbのデータのうち、両方に存在する場合、aに存在する場合、bに存在する場合で新しく配列を作っています。
イテレータも両方に存在するときと片方にしか存在しない場合とで処理をかえ、二つの配列を順にチェックするようになっています。
うーん、なんちゃってSEのぼくにはこの考えがパッと出てこないので、まだまだ勉強不足ってことですね。
同じようなことを行う別の方法を知っていましたら、教えてくださーい。