現在フィルター システムを構築しており、配列要素の順序が変更された場合に二重フィルター処理を回避したいという問題が発生しています。
たとえば、次のオブジェクトを取得しました。
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についても読みましたが、使い方がよくわかりません。