对象数组的嵌套过滤

时间:2019-11-13 03:15:48

标签: javascript arrays json vue.js

我有一个常量packages,其中包含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()

this.taggedOrders = packages.filter(item => item.object_tags[0].tag.name === 'Lost');

但是我遇到一个错误:

  

未捕获的TypeError:无法读取未定义的属性'tag'

所以我尝试做嵌套的.filter()

this.taggedOrders = packages.filter(item => item.object_tags.filter(x => x.tag.name === 'Lost'));

但是现在它只返回整个数组,没有过滤任何内容。

我想念什么?

2 个答案:

答案 0 :(得分:1)

我明白了。我使用了.some()

this.taggedOrders = packages.filter(item => item.object_tags.some(x => x.tag.name === 'Lost'));

答案 1 :(得分:-1)

您几乎就在那儿,使用嵌套过滤器,您还需要先达到第一个过滤条件。在这种情况下,您可以使用长度> 0的条件。例如:

this.taggedOrders = packages.filter(p => p.object_tags.filter(t => t.tag.name === 'Lost').length > 0);