【问题标题】:Nested filtering of array of objects对象数组的嵌套过滤
【发布时间】:2020-03-08 19:39:33
【问题描述】:

我有这个常量 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');

但我收到一个错误:

未捕获的类型错误:无法读取未定义的属性“标签”

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

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

但现在它只返回整个数组,没有过滤。

我错过了什么?

【问题讨论】:

    标签: javascript arrays json vue.js


    【解决方案1】:

    我明白了。我用.some()

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        • 2020-09-17
        • 1970-01-01
        相关资源
        最近更新 更多