仅使用数组属性子集的对象来过滤Javascript数组

3

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

let Customer = {
    Name: "John Doe",
    Age: 80,
    Hair: "Red",
    Gender: "Male",

};

我有一个搜索对象:

let searchObject ={
    Hair: "Red",
    Gender: "Male"
}

我希望能够在我的数组中查找与搜索对象匹配的所有客户,而不必执行以下操作:

this.array.filter(z=>z.Hair == searchObject.Hair && z.Gender == searchObject.Gender);

我希望当searchObject添加更多属性时,它能自动过滤这些属性。

仅包含 数组 对象的部分属性。 - epascarello
2个回答

3
您可以在内部使用searchObjectObject.keys()上使用every(),并检查searchObject中键的所有值是否与数组对象中相应值匹配。

下面的片段中,我有两个具有不同 Gender 的对象。

let array = [{
    Name: "John Doe",
    Age: 80,
    Hair: "Red",
    Gender: "Male",
},{
    Name: "Marry",
    Age: 80,
    Hair: "Red",
    Gender: "Female",
}]

let searchObject ={
    Hair: "Red",
    Gender: "Male"
}

const res = array.filter(x => Object.keys(searchObject).every(k => x[k] === searchObject[k]));

console.log(res)


1
你可以通过键/值对筛选条目。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接