オブジェクト配列の重複排除もおまかせ!JavaScriptでスマートな重複削除

2024-05-01

JavaScriptの配列から重複した値を削除する方法について、いくつか代表的な方法をご紹介します。

Setオブジェクトを使う

Setオブジェクトは、重複のない要素の集合を保持するデータ構造です。Setオブジェクトに配列を渡すと、重複した要素が自動的に削除され、新しいSetオブジェクトが生成されます。その後、このSetオブジェクトを配列に変換することで、重複のない値の配列を取得できます。

const originalArray = [1, 2, 3, 4, 1, 2, 3];
const uniqueSet = new Set(originalArray);
const uniqueArray = Array.from(uniqueSet);
console.log(uniqueArray); // [1, 2, 3, 4]

filter関数とindexOf関数を使う

filter関数とindexOf関数を組み合わせることで、重複した値を削除することもできます。filter関数は、条件に合致する要素のみを含む新しい配列を生成します。indexOf関数は、指定した値が配列内に最初に存在するインデックスを返します。

const originalArray = [1, 2, 3, 4, 1, 2, 3];
const uniqueArray = originalArray.filter(value => originalArray.indexOf(value) === originalArray.lastIndexOf(value));
console.log(uniqueArray); // [1, 2, 3, 4]

reduce関数を使う

reduce関数は、配列の要素を1つずつ処理し、最終的な値を返す関数です。reduce関数を使用して、重複した値を削除するには、以下のコードのように、処理済みの要素を格納する配列と、現在の要素を比較する必要があります。

const originalArray = [1, 2, 3, 4, 1, 2, 3];
const uniqueArray = originalArray.reduce((result, value) => {
  if (!result.includes(value)) {
    result.push(value);
  }
  return result;
}, []);
console.log(uniqueArray); // [1, 2, 3, 4]
const originalArray = [1, 2, 3, 4, 1, 2, 3];
const uniqueArray = [];
originalArray.forEach(value => {
  if (uniqueArray.indexOf(value) === -1) {
    uniqueArray.push(value);
  }
});
console.log(uniqueArray); // [1, 2, 3, 4]

上記以外にも、様々な方法でJavaScriptの配列から重複を削除することができます。自分に合った方法を見つけて、ぜひ活用してみてください。

補足

  • 上記のコード例は、単純な配列の重複削除を想定しています。オブジェクトの配列など、より複雑なデータ構造の場合は、適切な処理を行う必要があります。
  • 性能を考慮する場合は、Setオブジェクトを使用するのがおすすめです。



以下に、JavaScriptで配列から重複を削除する3つの方法のサンプルコードを紹介します。

Setオブジェクトを使う

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

const uniqueSet = new Set(originalArray);
const uniqueArray = Array.from(uniqueSet);

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

解説:

  1. originalArray という名前の配列を定義します。この配列には、重複した値が含まれています。
  2. new Set(originalArray) を使用して、originalArray の要素をすべて含む新しい Set オブジェクトを作成します。Set オブジェクトは、重複した要素を自動的に削除します。
  3. Array.from(uniqueSet) を使用して、uniqueSet の要素をすべて含む新しい配列を作成します。
  4. console.log(uniqueArray) を使用して、uniqueArray の内容を出力します。

filter関数とindexOf関数を使う

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

const uniqueArray = originalArray.filter(value => originalArray.indexOf(value) === originalArray.lastIndexOf(value));

console.log(uniqueArray); // [1, 2, 3, 4]
  1. originalArray.filter(value => originalArray.indexOf(value) === originalArray.lastIndexOf(value)) を使用して、originalArray の各要素について、その要素が配列内に最後に登場するかどうかを調べます。
    • originalArray.indexOf(value) は、valueoriginalArray 内に最初に登場するインデックスを返します。
    • originalArray.indexOf(value) === originalArray.lastIndexOf(value) は、valueoriginalArray 内に1回しか登場していないことを意味します。
  2. 上記の条件を満たす要素のみを含む新しい配列を生成します。

reduce関数を使う

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

const uniqueArray = originalArray.reduce((result, value) => {
  if (!result.includes(value)) {
    result.push(value);
  }
  return result;
}, []);

console.log(uniqueArray); // [1, 2, 3, 4]
  1. originalArray.reduce((result, value) => {...}, []) を使用して、originalArray の各要素を処理します。
    • result は、処理済みの要素を格納する配列です。
    • value は、現在処理している要素です。
  2. if (!result.includes(value)) { result.push(value); } は、valueresult にまだ含まれていない場合は、resultvalue を追加します。
  3. 上記の処理を originalArray のすべての要素に対して実行します。

これらのコード例は、基本的な方法を示しています。状況に応じて、より効率的な方法を選択することもできます。




JavaScriptで配列から重複を削除するその他の方法

上記で紹介した方法以外にも、JavaScriptで配列から重複を削除する方法はいくつかあります。以下に、いくつかの例を紹介します。

const originalArray = [1, 2, 3, 4, 1, 2, 3];
const uniqueArray = [];

for (let i = 0; i < originalArray.length; i++) {
  if (!uniqueArray.includes(originalArray[i])) {
    uniqueArray.push(originalArray[i]);
  }
}

console.log(uniqueArray); // [1, 2, 3, 4]
  1. for ループを使用して、originalArray の各要素を処理します。
  2. if (!uniqueArray.includes(originalArray[i])) は、originalArray[i]uniqueArray にまだ含まれていないかどうかを調べます。

オブジェクトのキーとして使用する

const originalArray = [1, 2, 3, 4, 1, 2, 3];
const uniqueObject = {};
const uniqueArray = [];

for (const value of originalArray) {
  if (!uniqueObject[value]) {
    uniqueObject[value] = true;
    uniqueArray.push(value);
  }
}

console.log(uniqueArray); // [1, 2, 3, 4]
  1. uniqueObject という空のオブジェクトを定義します。このオブジェクトは、originalArray の各要素をキーとして使用します。
  2. !uniqueObject[value] は、valueuniqueObject のキーとしてまだ存在していないかどうかを調べます。

ライブラリを使用する

JavaScriptには、配列から重複を削除する機能を提供するライブラリがいくつかあります。以下に、2つの例を紹介します。

これらのライブラリを使用するには、まずライブラリをインストールする必要があります。その後、以下のコードのようにライブラリの関数を使用して、配列から重複を削除することができます。

const originalArray = [1, 2, 3, 4, 1, 2, 3];
const uniqueArray = _.uniq(originalArray); // lodashを使用する場合
const uniqueArray = _.unique(originalArray); // underscoreを使用する場合

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

javascript arrays unique


デバッグのヒント: JavaScript コードのコールバック実行時間を測定して問題を特定する

最も簡単な方法は、Date. now() を使用して開始時間と終了時間を記録し、その差を計算することです。この方法は単純ですが、いくつかの問題があります。コードの実行時間によっては、精度が低くなる可能性があります。複数のコールバック関数の実行時間を測定したい場合、個別に測定する必要があります。...


BootstrapとjQueryで要素の表示・非表示を切り替えてインタラクティブなWebページを作る

このチュートリアルでは、Twitter Bootstrapを使用して要素を非表示にし、jQueryを使用して要素を表示する方法を説明します。この方法は、Webページ上の要素を動的に表示したり非表示したりする必要がある場合に役立ちます。必要なもの...


ReactJSにおける状態管理:setState メソッド vs useReducer フック

ReactJSは、状態とプロパティに基づいてコンポーネントをレンダリングします。状態はコンポーネント内部のプライベート変数であり、this. state オブジェクトとしてアクセスできます。setState メソッドは、状態オブジェクトの一部または全部を更新するために使用されます。このメソッドは非同期的に呼び出され、次のサイクルでレンダリングされる前に状態を更新します。...


ReactJS: ビューポート/ウィンドウの高さを取得する完全ガイド

これは、ビューポートの高さを取得する最も簡単な方法です。window オブジェクトの innerHeight プロパティは、ブラウザウィンドウの表示領域の高さをピクセル単位で返します。利点:シンプルで使いやすいすべてのブラウザでサポートされている...


【決定版】Angular で x-www-form-urlencoded 形式の POST リクエストを確実に送信する 3つの方法

以下、3つの方法で x-www-form-urlencoded 形式で POST を強制する方法を説明します。この方法では、URLSearchParams オブジェクトを使用して、送信するキーと値のペアを作成します。その後、toString() メソッドを使用して、クエリ文字列に変換します。最後に、Content-Type ヘッダーを application/x-www-form-urlencoded に設定して、リクエストを行います。...