总结:
感谢您的阅读!我一直在试图弄清楚如何将多个变量(数量未知)传递到一个接受对象数组(数量未知)的参数中简而言之:我想过滤掉不匹配的人从另一个数组中列出的所有条件(我也愿意使用剩余而不是数组)。
代码获取:
codePen:(一团糟)https://codepen.io/gold240sx/pen/NWXJKLv?editors=0011
我发现有助于获取键值对的其他代码:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
对于这个问题,我使用以下现有示例:https://sebhastian.com/javascript-filter-array-multiple-values/:
let filteredPeople = people.filter(function (currentElement) {
return currentElement.country === "America" && currentElement.age < 25;
});
console.log(filteredPeople);
这太棒了,除了假设我已经知道我要过滤的参数以及我要查找关联参数的元素。
//对象数组:
let people = [
{name: "Steve", age: 27, country: "America"},
{name: "Linda", age: 23, country: "Germany"},
{name: "Jimena", age: 29, country: "Spain"},
{name: "Eric", age: 24, country: "England"},
{name: "Jacob", age: 24, country: "America"},
];
let filters = [
{country: "America"},
{Age: 24}
];
//功能:(尝试)
const filterMatch = {}
const filterThePeople = ((data, filters) => {
filters.forEach(filter => {
//==========get key and value of filter=====================
for (const [key, value] of Object.entries(filter)) {
filterMatch[key] = value
return {key, value}
}
})
data.forEach(person => {
for (const [key2, value2] of Object.entries(data)) {
return {key2, value2}
}
})
})
console.log(filterThePeople(people, filters))
我不确定是否将“data.forEach...”语句放在上面的 for 语句中...我正在考虑放置一个 if 或 switch 语句,表示在数组中查找每个键以及何时找到一个匹配的键,然后它将查看每个键的值,如果键和值都匹配,则 += 到列表...最终将列表返回给函数。 (至少这是我脑海中想象的解决方案。我完全愿意接受任何和所有替代方法来实现这一目标!)
过滤匹配每个过滤器的人。我可能会补充一点,KEY 的命名在这里非常重要。在您的示例中,您稍后将
Age
作为大写字母。这也允许您构建这样的过滤器:
let filters = [ {country: "America", age: 24} ];
let people = [ { name: "Steve", age: 27, country: "America", }, { name: "Linda", age: 23, country: "Germany", }, { name: "Jimena", age: 29, country: "Spain", }, { name: "Eric", age: 24, country: "England", }, { name: "Jacob", age: 24, country: "America", }, ];
let filters = [
{country: "America"},
{age: 24}
];
let results = people.filter(p =>
filters.every(f=> Object.keys(f).every(k => p[k] === f[k]))
)
console.log(results);
你可以做这样的事情
let people = [
{name: "Steve", age: 27, country: "America"},
{name: "Linda", age: 23, country: "Germany"},
{name: "Jimena", age: 29, country: "Spain"},
{name: "Eric", age: 24, country: "England"},
{name: "Jacob", age: 24, country: "America"},
];
let filters = [
{country: "America"},
{age: 24}
];
const filtered = people.filter(p => filters.every(f => {
const [key] = Object.keys(f)
return p[key] === f[key]
}))
console.log(filtered)