我有一个具有许多属性的对象数组。我希望能够基于仅包含数组属性子集的过滤器对象找到匹配项。例如,我有一个客户
let Customer = {
Name: "John Doe",
Age: 80,
Hair: "Red",
Gender: "Male",
};
我有我的搜索对象:
let searchObject ={
Hair: "Red",
Gender: "Male"
}
我希望能够在我的数组中找到所有与searchObject匹配的客户,而不必这样做:
this.array.filter(z=>z.Hair == searchObject.Hair && z.Gender == searchObject.Gender);
我希望当searchObject添加更多属性时,它也会自动对这些属性进行过滤
答案 0 :(得分:3)
您可以在every()
的{{1}}上使用Object.keys()
,并检查searchObject
中所有键的值是否与数组中对象的相应值匹配。
在代码段下面,我有两个对象,它们具有不同的searchObject
Gender
答案 1 :(得分:2)
您可以输入条目并按键/值对进行过滤。
var customers = [{ Name: "John Doe", Age: 80, Hair: "Red", Gender: "Male" }],
searchObject = { Hair: "Red", Gender: "Male" },
search = Object.entries(searchObject),
result = customers.filter(o => search.every(([k, v]) => o[k] === v));
console.log(result);