Setオブジェクト、filter()、reduce()…JavaScriptで配列の重複を削除する3つの方法

2024-04-02

JavaScriptで配列の重複を取り除く方法

Setオブジェクトは、重複を許さない要素の集合を表すオブジェクトです。Setオブジェクトに配列を渡すと、重複した要素が自動的に削除されます。

const arr = [1, 2, 3, 1, 2, 4];

const uniqueSet = new Set(arr);
const uniqueArr = Array.from(uniqueSet);

console.log(uniqueArr); // [1, 2, 3, 4]

filter()とindexOf()を使う方法では、配列内の各要素について、その要素がすでに配列内に存在するかどうかを確認します。すでに存在する場合は、その要素を削除します。

const arr = [1, 2, 3, 1, 2, 4];

const uniqueArr = arr.filter((element, index) => {
  return arr.indexOf(element) === index;
});

console.log(uniqueArr); // [1, 2, 3, 4]

reduce()を使う方法では、配列内の各要素を累積的に処理し、重複のない新しい配列を作成します。

const arr = [1, 2, 3, 1, 2, 4];

const uniqueArr = arr.reduce((acc, element) => {
  if (!acc.includes(element)) {
    acc.push(element);
  }
  return acc;
}, []);

console.log(uniqueArr); // [1, 2, 3, 4]
  • Setオブジェクトを使う方法 は、最もシンプルでコードも短いため、多くの場合におすすめです。
  • filter()とindexOf()を使う方法 は、Setオブジェクトが使えない場合や、処理内容を細かく制御したい場合に便利です。
  • reduce()を使う方法 は、他の方法よりも処理速度が遅い場合があるため、あまり一般的ではありません。

JavaScriptで配列の重複を取り除く方法はいくつかあります。それぞれの方法のメリットとデメリットを理解して、状況に合わせて適切な方法を選択しましょう。




Setオブジェクトを使う

const arr = [1, 2, 3, 1, 2, 4];

const uniqueSet = new Set(arr);
const uniqueArr = Array.from(uniqueSet);

console.log(uniqueArr); // [1, 2, 3, 4]

filter()とindexOf()を使う

const arr = [1, 2, 3, 1, 2, 4];

const uniqueArr = arr.filter((element, index) => {
  return arr.indexOf(element) === index;
});

console.log(uniqueArr); // [1, 2, 3, 4]

reduce()を使う

const arr = [1, 2, 3, 1, 2, 4];

const uniqueArr = arr.reduce((acc, element) => {
  if (!acc.includes(element)) {
    acc.push(element);
  }
  return acc;
}, []);

console.log(uniqueArr); // [1, 2, 3, 4]



JavaScriptで配列の重複を取り除くその他の方法

forループとindexOf()を使う方法は、filter()とindexOf()を使う方法と似ていますが、forループを使用する点が異なります。

const arr = [1, 2, 3, 1, 2, 4];

const uniqueArr = [];

for (let i = 0; i < arr.length; i++) {
  if (uniqueArr.indexOf(arr[i]) === -1) {
    uniqueArr.push(arr[i]);
  }
}

console.log(uniqueArr); // [1, 2, 3, 4]

Object.keys()を使う方法は、オブジェクトのキーを取得する方法ですが、配列の重複を取り除くことにも使用できます。

const arr = [1, 2, 3, 1, 2, 4];

const uniqueArr = Object.keys(arr.reduce((acc, element) => {
  acc[element] = true;
  return acc;
}, {})).map(Number);

console.log(uniqueArr); // [1, 2, 3, 4]

Lodashなどのライブラリには、配列の重複を取り除くためのユーティリティ関数が用意されています。

const _ = require('lodash');

const arr = [1, 2, 3, 1, 2, 4];

const uniqueArr = _.uniq(arr);

console.log(uniqueArr); // [1, 2, 3, 4]

javascript unique arrays


JavaScriptとHTMLでEnterキーでフォームを送信する方法

ここでは、JavaScriptとHTMLを使って、Enterキーが押された時にフォームを送信する2つの方法を紹介します。この方法は、フォーム全体にイベントリスナーを追加する方法です。この例では、submitFormという関数をonsubmitイベントに設定しています。この関数は、Enterキーが押された時に呼び出され、以下の処理を行います。...


音でWebページをもっと楽しく!HTML5 AudioとJavaScriptでサウンドエフェクトを作ろう

このチュートリアルでは、JavaScript、HTML、HTML5 Audio を使ってサウンドエフェクトを作成する方法を説明します。必要なものテキストエディタWebブラウザ手順サウンドファイルの準備まず、使用するサウンドファイルを用意する必要があります。MP3 や OGG などの一般的なオーディオフォーマットがおすすめです。サウンドファイルは、プロジェクトと同じディレクトリに保存するか、Webサーバー上の URL を使用することができます。...


チェックボックスのチェック状態を確認:jQuery vs JavaScript

jQueryには、チェックボックスの状態を確認するための便利なメソッドがいくつか用意されています。ここでは、代表的な3つの方法と、それぞれの注意点について解説します。is(':checked') メソッドを使う最もシンプルな方法です。以下のコードのように、is(':checked') メソッドを使うことで、チェックボックスがチェックされているかどうかを判定できます。...


Angular コンポーネントで ngOnInit、ngOnChanges、ngAfterContentInit、ngAfterViewInit ライフサイクルフックを駆使してデータ処理を行う方法

Angular コンポーネントにおいて、入力データはコンポーネントのライフサイクルの特定のタイミングでのみ利用可能です。 以下のライフサイクルフックで、コンポーネントに入力データが利用できます。ngOnInit最も一般的に使用されるフックで、コンポーネントが初期化された直後に呼び出されます。 コンポーネントの初期化処理や、入力データに基づいた処理を行うのに適しています。...


SQL SQL SQL SQL Amazon で見る



【徹底比較】JavaScriptの配列から重複を削除する3つの方法のメリットとデメリット

JavaScriptの配列から重複する値を削除するには、いくつかの方法があります。方法 1: Set オブジェクトを使用する最も簡単な方法は、Set オブジェクトを使用することです。Set オブジェクトは、重複を許容しない要素の集合を表します。


「初心者向け」や「上級者も納得」

Setオブジェクトを使うJavaScriptには、重複なしの値を格納できるSetオブジェクトがあります。これは最もシンプルで効率的な方法の一つです。forEachとindexOfを使うこの方法は、ループを使って配列を繰り返し、indexOfを使って同じ値がすでに出現しているかどうかをチェックします。