我目前正在构建一个过滤系统,我遇到了一个问题,如果数组元素的顺序发生变化,我想防止双重过滤。
例如,我得到了这个对象:
const filters = {
brands: [],
models: [],
}
用户 A 选择品牌 Audi (id 5f1d5077b261aa63f42cc8a9
) 和 BMW (id 5f1d5077b261aa63f42cc8aa
) 所以你得到这个对象:
{
brands: ["5f1d5077b261aa63f42cc8a9", "5f1d5077b261aa63f42cc8aa"],
models: [],
}
用户 B 做同样的事情,但相反(首先是宝马,然后是奥迪)。所以我们最终得到了这个:
{
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的内容,但我并不真正了解如何使用它。