質問: javascript配列を使用してセットの差を計算する最も速いまたは最もエレガントな方法は何ですか? aとbを2つのセットとします。私は本当にセットの差を計算するための高速またはエレガントな方法を探しています(a - bまたはa \b、あなたの好みに応じて)それらの間。タイトルが示すように、2つのセットはjavascript配列として保存および操作されます。ノート: gecko固有のトリックは大丈夫です 私はネイティブ関数に固執することを好む(しかし、それがずっと速いなら、私は軽量ライブラリにオープンです) 私は見ましたが、テストされていません js.set (前のポイントを参照) 編集:重複する要素を含むセットに関するコメントに気付きました。 「セット」と言うとき、数学的な定義を指します。これは、(特に)重複する要素が含まれていないことを意味します。
回答: 配列bをハッシュし、bに存在しない配列aの値を保持します。function gethash(array){ // hash an array into a set of properties // // params: // array - (array) (!nil) the array to hash // // return: (object) // hash object with one property set to true for each value in the array var hash = {}; for (var i=0; i<array.length; i++){ hash[ array[i] ] = true; } return hash; } function getdifference(a, b){ // compute the difference a\b // // params: // a - (array) (!nil) first array as a set of values (no duplicates) // b - (array) (!nil) second array as a set of values (no duplicates) // // return: (array) // the set of values (no duplicates) in array a and not in b, // listed in the same order as in array a. var hash = gethash(b); var diff = []; for (var i=0; i<a.length; i++){ var value = a[i]; if ( !hash[value]){ diff.push(value); } } return diff; }