通过仅包含数组属性子集的对象过滤javascript数组

时间:2019-05-14 13:26:12

标签: javascript arrays angular typescript filtering

我有一个具有许多属性的对象数组。我希望能够基于仅包含数组属性子集的过滤器对象找到匹配项。例如,我有一个客户

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添加更多属性时,它也会自动对这些属性进行过滤

2 个答案:

答案 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);