JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで配列内の重複要素をすべて削除する方法

リテラル値を要素とする配列を受け取り、重複している値をすべて削除するJavaScript関数を作成する必要があります。

配列には同じ値が複数回含まれている場合があります。この関数では、そのような繰り返しの値を配列からすべて取り除きます。つまり、重複している要素のインスタンスは1つ残らず削除しなければなりません。

アプローチ

この問題は、filter()メソッドとindexOf()lastIndexOf()メソッドを組み合わせることで解決できます。

ある要素について、indexOf()が返す「最初の出現位置」と、lastIndexOf()が返す「最後の出現位置」が一致していれば、その要素は配列内に1回しか存在しないことを意味します。逆に位置が異なる場合は、その要素が重複していると判断できます。

コード例

実際のコードは以下の通りです。

const arr = [1, 2, 3, 2, 4];
const removeAllInstances = (arr = []) => {
   filtered = arr.filter(val => {
      const lastIndex = arr.lastIndexOf(val);
      const firstIndex = arr.indexOf(val);
      return lastIndex === firstIndex;
   });
   return filtered;
};
console.log(removeAllInstances(arr));

出力結果

コンソールには以下のように出力されます。

[ 1, 3, 4 ]

コードの解説

上記の例では、入力配列[1, 2, 3, 2, 4]の中で「2」だけが2回出現しているため、重複要素と判定され削除されます。その結果、[1, 3, 4]という配列が返されます。

なお、この実装では各要素に対してindexOf()lastIndexOf()を呼び出すため、計算量はO(n²)になります。大きな配列を扱う場合は、Mapを使って各要素の出現回数を先に数えておく方法が効率的です。

パフォーマンスを改善した例

const removeAllInstancesOptimized = (arr = []) => {
   const countMap = new Map();
   arr.forEach(val => {
      countMap.set(val, (countMap.get(val) || 0) + 1);
   });
   return arr.filter(val => countMap.get(val) === 1);
};
console.log(removeAllInstancesOptimized([1, 2, 3, 2, 4])); // [ 1, 3, 4 ]

この方法なら、配列を2回走査するだけで済むため、計算量はO(n)となり、大規模なデータでも高速に動作します。

  1. JavaScript配列から一意の値(重複なし)を取得する方法

    JavaScriptの配列に含まれる重複した値を取り除き、一意の値(ユニークな値)だけを取得したい場合は、Setオブジェクトを使うのが最もシンプルで効率的な方法です。 Setは同じ値を1つしか格納できないデータ構造のため、配列をnew Set()に渡すだけで自動的に重複が排除されます。その後、スプレッド構文([...set])を使えば、簡単に元の配列形式へ戻すことができます。 サンプルコード 以下は、JavaScriptの配列からすべての一意の値を取得する実際のコード例です。 <!DOCTYPE html> <html lang=ja> <head> <

  2. JavaScriptでIDを指定して要素を削除する方法

    JavaScriptでIDを指定して要素を削除するIDを使ってHTML要素を削除するには、remove()メソッドを使用します。このメソッドは、対象のDOM要素をドキュメントから直接取り除くことができる、最もシンプルで直感的な方法です。コード例以下は実際のサンプルコードです。<!DOCTYPE html> <html lang=ja> <head>    <meta charset=UTF-8>    <meta name=viewport content=width=device-width, in