Javascript 过滤json子数组
我在JSON文件中过滤数组时遇到问题 当我在主阵列中使用Javascript 过滤json子数组,javascript,arrays,json,Javascript,Arrays,Json,我在JSON文件中过滤数组时遇到问题 当我在主阵列中使用过滤器时,它可以工作,但在子阵列中我不能这样做 这是JSON文件: [ { "id": 1354, "name": "name", "type": "simple", "status": "ok", "categories": [ { "id": 79, "name"
过滤器时,它可以工作,但在子阵列中我不能这样做
这是JSON文件:
[
{
"id": 1354,
"name": "name",
"type": "simple",
"status": "ok",
"categories": [
{
"id": 79,
"name": "A",
},
{
"id": 68,
"name": "B",
}
]
},
{
"id": 1368,
"name": "name",
"type": "simple",
"status": "ok",
"categories": [
{
"id": 79,
"name": "A",
},
{
"id": 72,
"name": "C",
}
]
},
{...}
]
我正在使用此代码进行筛选,它按预期工作,并返回状态为“ok”的项目。
:
return items.filter( item => {
return item.status == 'ok';
});
我想归档的是返回包含category.name:'B'
的项目
此代码似乎仅适用于第一类,如果项目的第一类不是“B”,则此项目不显示:
return items.filter( item => {
for (let category of item.categories) {
return category.name == 'B';
}
});
感谢您的任何想法您在
for
循环中返回得太早了。您需要的是:
const res=arr.filter(e=>e.categories.some({name}=>name==B');
控制台日志(res)代码>
常数arr=[
{
“id”:1354,
“名称”:“名称”,
“类型”:“简单”,
“状态”:“确定”,
“类别”:[
{
“id”:79,
“姓名”:“A”,
},
{
“id”:68,
“名称”:“B”,
}
]
},
{
“id”:1368,
“名称”:“名称”,
“类型”:“简单”,
“状态”:“确定”,
“类别”:[
{
“id”:79,
“姓名”:“A”,
},
{
“id”:72,
“姓名”:“C”,
}
]
},
]
您可以执行以下操作:
return items.filter( item => {
return item.categories.findIndex(category => category.name === 'B') > -1
});
尝试改用Array.prototype.some()
——只有当一些数组元素满足传递的条件时,它才会返回true
常量整=[
{
“id”:1354,
“名称”:“名称”,
“类型”:“简单”,
“状态”:“确定”,
“类别”:[
{
“id”:79,
“姓名”:“A”,
},
{
“id”:68,
“名称”:“B”,
}
]
},
{
“id”:1368,
“名称”:“名称”,
“类型”:“简单”,
“状态”:“确定”,
“类别”:[
{
“id”:79,
“姓名”:“A”,
},
{
“id”:72,
“姓名”:“C”,
}
]
},
{
“id”:1364,
“名称”:“名称”,
“类型”:“简单”,
“状态”:“确定”,
“类别”:[
{
“id”:71,
“名称”:“B”,
},
{
“id”:70,
“姓名”:“C”,
}
]
},
]
const filtered=整个过滤器(级别1=>{
返回级别1.类别。一些(级别2=>级别2['name']=='B')
})
console.log(过滤)代码>您在第一次类别检查后立即返回。若类别名称与所需模式不匹配,则应继续迭代,并仅在所有迭代后返回false
return items.filter(item => {
for (let category of item.categories) {
if (category.name === 'B') {
return true;
}
}
return false;
});