ホームページ >ウェブフロントエンド >jsチュートリアル >特定のプロパティに基づいてオブジェクトの配列を効率的に重複排除する方法は?

特定のプロパティに基づいてオブジェクトの配列を効率的に重複排除する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-01 04:16:111026ブラウズ

How to Efficiently Deduplicate Arrays of Objects Based on Specific Properties?

オブジェクト配列の効率的な重複排除

配列から重複オブジェクトを削除することは、データの整合性とパフォーマンスの最適化にとって重要です。この記事では、オブジェクトを含む配列から重複を削除する効果的な方法について説明します。

問題:

ネストされたオブジェクトの配列を持つオブジェクトを考えてみましょう。目標は、「場所」と「名前」のプロパティに基づいて重複したオブジェクトを削除することです。

obj = {};

obj.arr = new Array();

obj.arr.push({place: "here", name: "stuff"});
obj.arr.push({place: "there", name: "morestuff"});
obj.arr.push({place: "there", name: "morestuff"});

解決策:

方法 1: ES6 フィルタリングArray.filter とArray.findIndex

obj.arr = obj.arr.filter((value, index, self) =>
  index === self.findIndex((t) =>
    t.place === value.place && t.name === value.name
  )
);

このメソッドは、Array.filter と Array.findIndex を利用して配列を反復処理し、重複を特定します。両方のプロパティを保持して、一意のオブジェクトのみを返します。

方法 2: JSON.stringify を使用した一般的な解決策

const uniqueArray = obj.arr.filter((value, index) => {
  const _value = JSON.stringify(value);
  return index === obj.arr.findIndex((obj) => {
    return JSON.stringify(obj) === _value;
  });
});

このアプローチでは、オブジェクトの JSON 表現を次と比較します。重複を検出します。これは、任意のプロパティ構造を持つオブジェクトに対応できる汎用ソリューションです。

方法 3: カスタム プロパティの等価比較を使用する

const isPropValuesEqual = (subject, target, propNames) =>
  propNames.every((propName) => subject[propName] === target[propName]);

const getUniqueItemsByProperties = (items, propNames) =>
  items.filter((item, index, array) =>
    index === array.findIndex((foundItem) => isPropValuesEqual(foundItem, item, propNames))
  );

この方法では、よりカスタマイズされたプロパティの比較が可能になります。 。コールバック関数を使用してプロパティの同等性を判断し、指定されたプロパティに基づいてオブジェクトの一意のセットを返します。

説明:

重複排除の鍵は、重複を検索し、結果からそれらを除外します。 findIndex 関数は、特定のプロパティを持つオブジェクトの最初のインスタンスを識別するのに役立ち、フィルターはその後に発生する重複を削除します。

以上が特定のプロパティに基づいてオブジェクトの配列を効率的に重複排除する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。