【问题标题】:How to filter JSON object array across nested array with in it如何在嵌套数组中过滤 JSON 对象数组
【发布时间】:2019-08-01 11:52:12
【问题描述】:

我有一个对象数组,我正在根据属性名称“用户名”过滤它。

array =   [{
    "id": 1,
    "username": "admin",
    "roles": [{
            "name": "Administrator"
        },
        {
            "name": "agent"
        }
    ]
},
{
    "id": 2,
    "username": "admin2",
    "roles": [{
            "name": "Administrator2"
        },
        {
            "name": "agent2"
        }
    ]
},
{
    "id": 3,
    "username": "admin3",
    "roles": [{
            "name": "Administrator3"
        },
        {
            "name": "agent3"
        }
      ]
    }
  ]

而过滤功能是这样的

  transform(array: any, valueToSearch: string): any[] {

      return array.filter(e => 
       e.username.toLowerCase().indexOf(valueToSearch.toLowerCase()) 
       !== -1);

     }

一切正常,但现在我想过滤对象中“角色”数组中的属性名称“名称”。例如,我想返回一个“roles”数组包含“name”= agent3 的对象,所以它应该返回在我的示例中位于最后的整个对象。我试过了

return agents.filter(e => e.roles.filter(ee => 
       ee.valueToSearch.toLowerCase()) !== -1));

但是没有用。

这是 dmeo https://stackblitz.com/edit/angular-txchxs?embed=1&file=src/app/agentFilter.pipe.ts

【问题讨论】:

标签: arrays json angular typescript


【解决方案1】:

根据您在问题中给出的示例,我能够像这样更改您现有的功能,我希望这是您的要求..

  ngOnInit() {
    this.transform(this.array,'agent3');
  }

  transform(array: any, valueToSearch: string): any[] {
    return  this.array.filter(e => {
        e.roles.filter(ee => {
          if(ee.name.toLowerCase() === valueToSearch.toLowerCase() ) {
            console.log(e);
            this.finalResult = e;
          }
        })
      })
  }

工作 Stackblitz:https://stackblitz.com/edit/angular-uzgni7

【讨论】:

  • 您的代码工作正常,但我想要一个过滤器场景,而不是搜索,它只在整个单词匹配时返回对象。但我希望当用户输入一个单词时,它会开始比较并返回合适的值
  • 我需要的那个场景
  • @RazaEllahi,这是否是您的预期? stackblitz.com/edit/angular-pmzzg7 如果您输入用户名,那么它将过滤数据并显示与用户名相关的对象..
  • 我想在“roles”数组中按“name”属性搜索
【解决方案2】:

myarray =   [{
    "id": 1,
    "username": "admin",
    "roles": [{
            "name": "Administrator"
        },
        {
            "name": "agent"
        }
    ]
},
{
    "id": 2,
    "username": "admin2",
    "roles": [{
            "name": "Administrator2"
        },
        {
            "name": "agent2"
        }
    ]
},
{
    "id": 3,
    "username": "admin3",
    "roles": [{
            "name": "Administrator3"
        },
        {
            "name": "agent3"
        }
      ]
    }
  ];
  

function myFunction(){
    var filtered= myarray.filter((obj)=>{
        return obj.username.match(new RegExp(document.getElementById('search').value,'ig'));
    });
    console.log(filtered);
};
<input type="text" id="search" onkeyup="myFunction()"/>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 2020-03-11
  • 2020-03-08
相关资源
最近更新 更多