Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Reactjs - Fatal编程技术网

如何过滤对象的javascript数组

如何过滤对象的javascript数组,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我有两个阵列。我使用PubSidebar过滤基于groupKey的内容 let groupKey=['oaDeal','Journals','Deposit'] //此对象数组将使用groupKey进行筛选 const PubSidebar=[ { 值:“仪表板”, 角色:'公众', }, { 值:“oaDeal”, 角色:'私人', 内容:[ { 角色:'私人', 值:“oaDeal”, }, ], }, { 价值:“日记账”, 角色:'公众', 内容:[ { 角色:'私人', 价值:“日记

我有两个阵列。我使用PubSidebar过滤基于groupKey的内容

let groupKey=['oaDeal','Journals','Deposit']
//此对象数组将使用groupKey进行筛选
const PubSidebar=[
{
值:“仪表板”,
角色:'公众',
},
{
值:“oaDeal”,
角色:'私人',
内容:[
{
角色:'私人',
值:“oaDeal”,
},
],
},
{
价值:“日记账”,
角色:'公众',
内容:[
{
角色:'私人',
价值:“日记账”,
},
{
角色:'私人',
值:“令牌”,
},
{
角色:'私人',
值:'策略',
},
{
角色:'私人',
价值:'存款',
},
{角色:'public',值:'test'},
],
},
]
//这是我的代码。我正在过滤侧边栏
const res=PubSidebar.filter(x=>{
//当主outerloop角色为public或private且组密钥匹配时
如果(
x、 角色==='public'||
(x.role=='private'&&groupKey.includes(x.value))
) {
//然后,如果存在内部数组,则进行内部数组过滤
如果(x.content){
//内部内容分配条件public或private和groupKey
设tempX=x.content.filter(
y=>
y、 角色==='public'||
(y.role=='private'&&groupKey.includes(y.value))||
x、 值===y.value
)
x、 content=tempX
console.log(tempX)
返回x
}否则{
//另一方面,给我一个单一的公共对象
console.log(x)
返回x
}
}

})
如果我理解正确,您希望筛选PubSidebar。如果值具有public角色或groupKey中包含的值,则保留这些值。如果是这样,这将是您的功能:

PubSidebar.filter(x => (x.role === 'public' || groupKey.includes(x.value));
如果您想在内容上运行该功能,我们可以将其分离:

const filterByGroup = (x) => (x.role === 'public' || groupKey.includes(x.value));

let result = [];
for (let i = 0; i < PubSidebar.length; i++) {
  const item = PubSidebar[i];

  if (filterByGroup(item)) {
    if (item.content) {
      item.content = item.content.filter(filterByGroup);
    }
    result = [ ...result, item ];
  }
}
const filterByGroup=(x)=>(x.role=='public'| | groupKey.includes(x.value));
让结果=[];
for(设i=0;i
片段:

let groupKey=['oaDeal','Journals','Deposit']
常量公共边栏=[{
值:“仪表板”,
角色:'公众',
},
{
值:“oaDeal”,
角色:'私人',
内容:[{
角色:'私人',
值:“oaDeal”,
}, ],
},
{
价值:“日记账”,
角色:'公众',
内容:[{
角色:'私人',
价值:“日记账”,
},
{
角色:'私人',
值:“令牌”,
},
{
角色:'私人',
值:'策略',
},
{
角色:'私人',
价值:'存款',
},
{
角色:'公众',
值:“测试”
},
],
},
]
const filterByGroup=(x)=>(x.role=='public'| | groupKey.includes(x.value));
让结果=[];
for(设i=0;i控制台日志(结果)您可以对任何深度进行过滤,然后重新组合对象以获得结果

const
筛选器=({content=[],…o})=>{
content=content.flatMap(过滤器);
if(o.role!=“public”&&!groupKey.includes(o.value))返回[];
返回content.length?{…o,content}:o;
},
groupKey=['oaDeal','Journals','Deposit'],
pubSidebar=[{value:'Dashboard',role:'public'},{value:'oaDeal',role:'private',content:[{role:'private',value:'oaDeal'}]},{value:'Journals'},{role:'private',value:'Token'},{role:'private',value:'policy'},{role:'private',value:'Deposit'},{角色:'public',值:'test'}]}],
结果=pubSidebar.flatMap(过滤器);
console.log(结果);

.as控制台包装{max height:100%!important;top:0;}
对数组项和每个项的内容应用
过滤器

const update=(数据、键)=>{
常量publicOrGroup=({role,value})=>
角色===“public”| |键。包括(值);
返回data.filter(publicOrGroup.map)({content=[],…item})=>({
…项目,
内容:content.filter(publicOrGroup)
}));
};
const groupKey=[“oaDeal”、“日记账”、“存款”];
常量公共边栏=[
{
值:“仪表板”,
角色:“公众”
},
{
值:“oaDeal”,
角色:“私人”,
内容:[
{
角色:“私人”,
值:“oaDeal”
}
]
},
{
价值:“期刊”,
角色:“公众”,
内容:[
{
角色:“私人”,
价值:“期刊”
},
{
角色:“私人”,
值:“令牌”
},
{
角色:“私人”,
价值观:“政策”
},
{
角色:“私人”,
价值:“存款”
},
{
角色:“公众”,
值:“测试”
}
]
}
];

日志(更新(PubSidebar,groupKey))
预期输出???只需编辑,您能看到区别在哪里吗?我只想在基于内容的groupKey中传递对象。例如,存款和日记与PubSidebar内容日记和存款匹配,然后我们得到三个对象,包括公共对象。如果存款不匹配,则存款将从pubsidebarif G中删除GroupKey journals与pubsidebar中的content对象匹配,然后得到两个对象,{value:“journals”,role:“private}和{role:'public',value:'test'},@sujon sure-added