ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript 配列から重複する値を効率的に削除するにはどうすればよいですか?

JavaScript 配列から重複する値を効率的に削除するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-20 13:00:26
オリジナル
734 人が閲覧しました

How to Efficiently Remove Duplicate Values from a JavaScript Array?

JS 配列から重複値を削除する

JavaScript 配列から重複値を削除することは、特に冗長なエントリを含む可能性のあるデータを扱う場合によく行われるタスクです。これを効果的に実現するには、データの性質とパフォーマンスの考慮事項に応じて、いくつかのアプローチがあります。

Set コンストラクターとスプレッド構文の使用

この方法では、組み込みの Set コンストラクターとスプレッドを利用します。元の配列の一意の値のみを含む新しい配列を作成する構文:

const uniq = [...new Set(array)];
ログイン後にコピー

「スマート」だが単純way

このアプローチでは、filter() メソッドを使用して配列を反復処理し、最初に出現した各要素が配列内の現在の位置と一致するかどうかを確認します。位置が一致しない要素は重複とみなされます。

const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
ログイン後にコピー

ハッシュテーブルが役に立ちます

ハッシュテーブルは、キーと値のペアを使用して重複要素を検出する効率的な方法を提供します。このアプローチでは、各要素がハッシュテーブルに追加され、要素の存在が即座にチェックされます。

function uniq(a) {
  const seen = {};
  return a.filter((item) => {
    return seen.hasOwnProperty(item) ? false : (seen[item] = true);
  });
}
ログイン後にコピー

2 つの世界の最良のもの

前の 2 つの利点を組み合わせるこのアプローチでは、このソリューションはプリミティブ値のハッシュテーブルとオブジェクトの線形検索を利用します。 uniq

function uniq(a) {
  const prims = { boolean: {}, number: {}, string: {} }, objs = [];

  return a.filter((item) => {
    const type = typeof item;
    if (type in prims) return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true);
    else return objs.indexOf(item) >= 0 ? false : objs.push(item);
  });
}
ログイン後にコピー
重複を削除する前に配列をソートすると、プロセスを簡素化できます。

Unique by...

function uniq(a) {
  return a.sort().filter((item, pos, ary) => !pos || item != ary[pos - 1]);
}
ログイン後にコピー
特定の基準に基づいて重複を削除する必要がある場合、オブジェクトのプロパティなど、uniqBy() にコールバック関数を提供できます。メソッド:

最初または最後?

function uniqBy(a, key) {
  const seen = {};
  return a.filter((item) => {
    const k = key(item);
    return seen.hasOwnProperty(k) ? false : (seen[k] = true);
  });
}
ログイン後にコピー
重複オブジェクトの最初または最後の出現のみを保持したい場合は、Set または Map データ構造を使用できます:

以上がJavaScript 配列から重複する値を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート