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

JavaScriptでオブジェクト配列の重複を削除する方法

配列から重複するオブジェクトを取り除き、新しい配列を返す関数を作成する方法を解説します。ここで「重複」とは、2つのオブジェクトが同じ数のキーを持ち、同じキー名を含み、かつ各キーの値も完全に一致している場合を指します。

それでは、実際にコードを書いてみましょう。

このアプローチでは、JSON.stringify() で文字列化したオブジェクトをキーとしてマップ(連想配列)に格納します。すでに存在するキーが見つかった場合はそのオブジェクトをスキップし、初めて見るキーであれば新しい配列に追加していきます。

サンプルコード

const arr = [
  {
    "timestamp": 564328370007,
    "message": "It will rain today"
  },
  {
    "timestamp": 164328302520,
    "message": "will it rain today"
  },
  {
    "timestamp": 564328370007,
    "message": "It will rain today"
  },
  {
    "timestamp": 564328370007,
    "message": "It will rain today"
  }
];

const map = {};
const newArray = [];
arr.forEach(el => {
  if (!map[JSON.stringify(el)]) {
    map[JSON.stringify(el)] = true;
    newArray.push(el);
  }
});
console.log(newArray);

出力結果

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

[
  { timestamp: 564328370007, message: 'It will rain today' },
  { timestamp: 164328302520, message: 'will it rain today' }
]

補足:実装時の注意点

この方法はシンプルで高速ですが、JSON.stringify() はオブジェクトのキーを記述された順序どおりに文字列化するため、キーの並び順が異なる同じ内容のオブジェクトは「別物」と判定される点に注意が必要です。キーの順序を正規化したい場合は、事前に Object.keys() でキーをソートしてから文字列化するなどの工夫を行いましょう。

また、配列やネストされたオブジェクトが含まれる場合でも JSON.stringify() は機能しますが、undefined や関数、Symbol などの値は文字列化の際に失われるため、そうした値を含むデータには別の比較方法を検討してください。

  1. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g

  2. JavaScriptのlengthプロパティで配列オブジェクトの長さを取得する方法

    JavaScriptにおけるlengthプロパティとはJavaScriptのlengthプロパティは、文字列や配列などのオブジェクトが持つ要素数(サイズ)を返すために使用されます。配列の場合は格納されている要素の個数、文字列の場合は文字数を取得できます。ここでは、文字列と配列オブジェクトの長さをlengthプロパティで取得するサンプルコードを紹介します。サンプルコード以下の例では、ボタンをクリックすると配列の長さが画面に表示される仕組みを実装しています。<!DOCTYPE html> <html lang="ja"> <head> <