Javascript 过滤多个项目。对象中密钥对的值是数组

Javascript 过滤多个项目。对象中密钥对的值是数组,javascript,filter,Javascript,Filter,我试图过滤一个电子商务网站的数组,以便显示正确的项目 我的尝试如下。您可以看到,它返回2项,但只应返回此对象,因为它是唯一满足条件的对象。如果有人能给我指出正确的方向,我将不胜感激。任何需要的额外信息请告诉我 我已经到处阅读,乍一看似乎已经得到了回答,但我相信这里的区别在于,这些项是以数组的形式组合在一起的 const过滤器={ 颜色:[“白色”], 尺码:[9,12], 品牌:[“阿迪达斯”] }; 康斯特鞋=[{ 品牌:“nike”, 尺码:9, 颜色:“白色” }, { 品牌:“阿迪达斯

我试图过滤一个电子商务网站的数组,以便显示正确的项目

我的尝试如下。您可以看到,它返回2项,但只应返回此对象,因为它是唯一满足条件的对象。如果有人能给我指出正确的方向,我将不胜感激。任何需要的额外信息请告诉我

我已经到处阅读,乍一看似乎已经得到了回答,但我相信这里的区别在于,这些项是以数组的形式组合在一起的

const过滤器={
颜色:[“白色”],
尺码:[9,12],
品牌:[“阿迪达斯”]
};
康斯特鞋=[{
品牌:“nike”,
尺码:9,
颜色:“白色”
},
{
品牌:“阿迪达斯”,
尺码:12,
颜色:“白色”
},
{
品牌:“nike”,
尺码:7,
颜色:“红色”
},
{
品牌:“nike”,
尺码:6,
颜色:“绿色”
},
{
品牌:“nike”,
尺码:9,
颜色:“绿色”
}
];
const res=shoes.filter((shoe)=>{
如果(
过滤器[“品牌]。包括(鞋。品牌)&&
过滤器[“颜色”]。包括(鞋色)&&
过滤器[“尺寸”]包括(鞋靴尺寸)
) {
返回true;
}
});

控制台日志(res)您的代码检查所有键,而不是与所需值关联的键,并采用some方法(使用逻辑OR),而不是every方法(如逻辑and)


您可以从filter对象获取条目,并根据给定值的长度筛选此数组

然后使用键和值进行过滤。这要求筛选器对象的值和所需值具有相同的命名键

const
过滤器={颜色:[“白色”],尺寸:[9,12],品牌:[“阿迪达斯”]},
鞋子=[{品牌:“耐克”,尺码:9,颜色:“白色”},{品牌:“阿迪达斯”,尺码:12,颜色:“白色”},{品牌:“耐克”,尺码:7,颜色:“红色”},{品牌:“耐克”,尺码:6,颜色:“绿色”},{品牌:“耐克”,尺码:9,颜色:“绿色”},
filters=Object.entries(filter.filter(([,{length}])=>length),
结果=shoes.filter(shoe=>filters.every([k,v])=>v.includes(shoe[k]));

控制台日志(结果)筛选器的原始键一样:
{颜色:'color',大小:'size',品牌:'brand'}
。是的,我做了一些事情,很接近,但还是有点不对劲,明白了,谢谢。你是一台机器!你能看看这个问题,看看你能不能给我指出正确的方向-