ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript で集合差分を計算するための効率的で洗練されたテクニックは何ですか?

Javascript で集合差分を計算するための効率的で洗練されたテクニックは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-21 10:49:021053ブラウズ

What are the Efficient and Elegant Techniques for Set Difference Computation in Javascript?

JavaScript での効率的かつエレガントな集合差の計算

JavaScript で集合演算を扱う場合、集合を計算する効率的かつエレガントな方法を見つける違い(A - B)は一般的な課題です。いくつかの方法を見てみましょう。

ネイティブ関数のアプローチ

1 つの簡単な解決策は、ネイティブ Javascript 関数を利用することです。

<code class="javascript">var A = [1, 2, 3, 4];
var B = [1, 3, 4, 7];

var diff = A.filter(function(x) {
  return B.indexOf(x) < 0;
});

console.log(diff); // [2]

ここでは、フィルター関数を使用します。配列 A を反復処理し、indexOf 操作を使用して各要素が B に存在するかどうかを確認します。見つからない場合、要素は差分配列 diff に追加されます。

連結と並べ替えのトリック

別のアプローチでは、JavaScript の連結と並べ替えの動作を利用します。

<code class="javascript">var A = [1, 2, 3, 4];
var B = [1, 3, 4, 7];

A = A.concat(B).sort().filter((v, i, a) => a[i] !== a[i + 1]);

console.log(A); // [2, 7]</code>

両方の配列を連結して並べ替えることにより、一意の要素の順序付きリストが得られます。連続する重複をフィルタリングすることで、設定された差異が得られます。

オブジェクトベースのアプローチ

ハッシュマップのようなオブジェクトを利用して両方の配列の一意の要素を格納すると、効率的なソリューションが得られます。

<code class="javascript">var A = [1, 2, 3, 4];
var B = [1, 3, 4, 7];

var setA = {};
A.forEach(function(x) { setA[x] = true; });

var setDiff = {};
B.forEach(function(x) { setDiff[x] = true; });

Object.keys(setA).forEach(function(x) {
  if (!setDiff[x]) {
    setDiff[x] = true;
  }
});

var diff = Object.keys(setDiff);

console.log(diff); // [2, 7]</code>

このアプローチでは、オブジェクトをハッシュマップとして使用して、両方の配列内の要素を追跡し、差分を効率的に計算します。

これらのメソッドは、効率と優雅さの点でさまざまなトレードオフを提供します。特定の要件に最も適したものを選択してください。

以上がJavascript で集合差分を計算するための効率的で洗練されたテクニックは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。