Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用可选值筛选集合_Javascript - Fatal编程技术网

Javascript 使用可选值筛选集合

Javascript 使用可选值筛选集合,javascript,Javascript,我有一个问题:我知道如何使用Array.prototype.filter,但我无法想象如何用可选键过滤掉项目。例如: [ {item: 1, paths: {category: "country", name: "England", access: 2}, {item: 3, paths: {category: "country", name: "Russia", access: 2}, {item: 2, paths: {category: "country", nam

我有一个问题:我知道如何使用
Array.prototype.filter
,但我无法想象如何用可选键过滤掉项目。例如:

[
    {item: 1, paths: {category: "country", name: "England", access: 2},
    {item: 3, paths: {category: "country", name: "Russia", access: 2},
    {item: 2, paths: {category: "country", name: "Portugal", access: 0}
]
我想有选择地通过路径过滤掉它们,比如说通过物体的形状:

{category: "country", access: 2}

如何实现这一点?

您可以在过滤器中编写一个自定义比较器,将比较器对象的所有值与以下项进行比较:

const数据=[
{项目:1,路径:{类别:“国家”,名称:“英格兰”,访问:2},
{项目:3,路径:{类别:“国家”,名称:“俄罗斯”,访问:2},
{项目:2,路径:{类别:“国家”,名称:“葡萄牙”,访问:0}
]
const比较器={类别:“国家”,访问:2};
常量compareObjectKeys=(比较器,项)=>{
返回Object.keys(comparator).every(key=>{
返回项。路径[key]==比较器[key];
})
}
const res=data.filter(项=>{
返回CompareObject键(比较器,项);
})

console.log(res)
您可以针对对象获取关键字、值和compair以进行筛选

var data=[{项目:1,路径:{类别:“国家”,名称:“英格兰”,访问:2}},{项目:3,路径:{类别:“国家”,名称:“俄罗斯”,访问:2},{项目:2,路径:{类别:“国家”,名称:“葡萄牙”,访问:0}],
筛选器={类别:“国家”,访问:2},
结果=数据。筛选器({paths})=>
Object.entries(filter.every([k,v])=>path[k]==v));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您期望的输出是什么?它应该返回英格兰和俄罗斯的数组。您的意思是希望筛选条件是动态的?如果是这样的话,我看错了问题,因为你不确定每个条目都有你想要过滤的属性来回答我的问题……不管这是不是他的意思,这是一个有用的片段。