Javascript 对象数组的嵌套过滤
我有一个常量Javascript 对象数组的嵌套过滤,javascript,arrays,json,vue.js,Javascript,Arrays,Json,Vue.js,我有一个常量包,它包含一个对象标记数组 const packages = [{ "id":"11", "object_tags":[ { "id":"400", "tag":{ "id":"30", "name":"Sample Tag" }, } ], }, { "id":"12", "object_tags":[ {
包
,它包含一个对象标记数组
const packages = [{
"id":"11",
"object_tags":[
{
"id":"400",
"tag":{
"id":"30",
"name":"Sample Tag"
},
}
],
},
{
"id":"12",
"object_tags":[
{
"id":"401",
"tag":{
"id":"31",
"name":"Lost"
},
}
],
}]
我想过滤那些只有标签名为Lost
的包。所以我尝试了.filter()
但我得到了一个错误:
未捕获的TypeError:无法读取未定义的属性“标记”
所以我尝试了嵌套.filter()
但现在它只返回整个数组,没有任何过滤
我错过了什么?我知道了。我使用了
.some()
就快到了,使用嵌套过滤器时,还需要获得第一个过滤器条件。。在这种情况下,可以使用长度>0的条件。例:
this.taggedOrders = packages.filter(p => p.object_tags.filter(t => t.tag.name === 'Lost').length > 0);
this.taggedOrders = packages.filter(item => item.object_tags.filter(x => x.tag.name === 'Lost'));
this.taggedOrders = packages.filter(item => item.object_tags.some(x => x.tag.name === 'Lost'));
this.taggedOrders = packages.filter(p => p.object_tags.filter(t => t.tag.name === 'Lost').length > 0);