Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 按4级字段过滤json数据集_Javascript_Arrays_Json_Lodash - Fatal编程技术网

Javascript 按4级字段过滤json数据集

Javascript 按4级字段过滤json数据集,javascript,arrays,json,lodash,Javascript,Arrays,Json,Lodash,以下面的json结构为例,我如何在4层以下的categories节点上过滤它 例如,只返回一个json对象,其中包含具有“cat8”的项。在本例中,我将得到项目a和B 我正在使用node并安装了lodash 我通常会在源代码处过滤数据,但对于我拥有的数据集,我不能这样做 { “项目”:[ { “字段”:{ “标题”:“A项”, “第1节”:{ “字段”:{ “头衔”:“二级头衔”, “第2节”:{ “字段”:{ “头衔”:“三级头衔”, “第3节”:{ “字段”:{ “头衔”:“四级头衔”, “

以下面的json结构为例,我如何在4层以下的categories节点上过滤它

例如,只返回一个json对象,其中包含具有“cat8”的项。在本例中,我将得到项目a和B

我正在使用node并安装了lodash

我通常会在源代码处过滤数据,但对于我拥有的数据集,我不能这样做

{
“项目”:[
{
“字段”:{
“标题”:“A项”,
“第1节”:{
“字段”:{
“头衔”:“二级头衔”,
“第2节”:{
“字段”:{
“头衔”:“三级头衔”,
“第3节”:{
“字段”:{
“头衔”:“四级头衔”,
“类别”:[
“第1类”,
“第六类”,
“第八类”
]
}
}
}
}
}
}
}
},
{
“字段”:{
“标题”:“B项”,
“第1节”:{
“字段”:{
“头衔”:“二级头衔”,
“第2节”:{
“字段”:{
“头衔”:“三级头衔”,
“第3节”:{
“字段”:{
“头衔”:“四级头衔”,
“类别”:[
“第1类”,
“第八类”
]
}
}
}
}
}
}
}
},
{
“字段”:{
“标题”:“C项”,
“第1节”:{
“字段”:{
“头衔”:“二级头衔”,
“第2节”:{
“字段”:{
“头衔”:“三级头衔”,
“第3节”:{
“字段”:{
“头衔”:“四级头衔”,
“类别”:[
“第1类”,
“第三类”
]
}
}
}
}
}
}
}
}
]
}

使用lodash非常简单

const results=\.filter(deepObject,['path.to.deep.property',expectedValue])

在事先不知道结构的情况下,您可以访问所有对象并检查这些值是否包含所需的值

const
hasCategory=o=>Object
.价值观(o)
.some(p=>p==category | | p&&typeof p==='object'&&hascapection(p)),
数据={项目:{字段:{标题:“项目A”,第1节:{字段:{标题:“2级标题”,第2节:{字段:{标题:“3级标题”,第3节:{字段:{标题:“4级标题”,类别:[“cat1”,“cat6”,“cat8”]}}}}},{字段:{标题:“项目B”,第1节:{字段:{标题:“2级标题”,第2节:{字段:{“三级标题”,第3节:{字段:{标题:“四级标题”,类别:[“cat1”、“cat8”]}}}}}}}}},{字段:{标题:“C项”,第1节:{字段:{标题:“二级标题”,第2节:{字段:{标题:“三级标题”,第3节:{字段:{标题:“四级标题”,类别:[“cat1”、“cat3”]}}}}}}},
类别='cat8',
结果=data.items.filter(hasCategory);
console.log(结果);

。作为控制台包装{max height:100%!important;top:0;}
这已经成功了。我使用了一个where,但我不知道如何使深层路径工作。现在可以工作了。谢谢