1

現在フィルター システムを構築しており、配列要素の順序が変更された場合に二重フィルター処理を回避したいという問題が発生しています。

たとえば、次のオブジェクトを取得しました。

const filters = {
  brands: [],
  models: [],
}

ユーザー A がブランド Audi (id 5f1d5077b261aa63f42cc8a9) と BMW (id ) を選択すると、次の5f1d5077b261aa63f42cc8aaオブジェクトが得られます。

{
  brands: ["5f1d5077b261aa63f42cc8a9", "5f1d5077b261aa63f42cc8aa"],
  models: [],
}

ユーザー B も同じことを行いますが、逆です (つまり、最初に BMW、次に Audi)。したがって、次のようになります。

{
  brands: ["5f1d5077b261aa63f42cc8aa", "5f1d5077b261aa63f42cc8a9"],
  models: [],
}

(ブランドの順番の違いに注意)

このコードでLodash isEqualを使用して、これらが等しいかどうかをチェックすると、次のようになります。

const _ = require("lodash");

const filtersA = {
    brands: ["5f1d5077b261aa63f42cc8a9", "5f1d5077b261aa63f42cc8aa"],
    models: [],
};

const filtersB = {
    brands: ["5f1d5077b261aa63f42cc8aa", "5f1d5077b261aa63f42cc8a9"],
    models: [],
};

console.log(_.isEqual(filtersA, filtersB));

false残念ながら、これは返されます。次のように、ブランドのみを比較してみました。

console.log(_.isEqual(filtersA.brands, filtersB.brands);

それも を返しますfalse

私の目標は、オブジェクト内のフィルターが等しい場合、他のフィルターの順序を確認せずに true を返すことです。同じアイテムが存在する限り、true を返す必要があります

Lodash isEqualWithについても読みましたが、使い方がよくわかりません。

4

1 に答える 1