Angular数组/模型按值过滤:如何获取所有boolresult为true的元素?
问题:筛选数组中所有boolresult为true的元素
我从服务中获取了如下格式的数据并导入Angular模型,想要筛选出所有boolresult值为true的元素。尝试使用find方法,但仅能得到1个元素,希望获取全部符合条件的元素,该如何实现?
示例数组:
[ { "ownername": "Owner", "result": "Result1", "clientname": "ClientName1", "boolresult": true }, { "ownername": "Owner", "result": "Result2", "clientname": "ClienName2", "boolresult": true }, { "ownername": "Owner", "result": "Result3", "clientname": "ClienName3", "boolresult": false }, { "ownername": "Owner", "result": "Result4", "clientname": "ClienName4", "boolresult": false } ]
我尝试的代码:
private getAllResults(){ let apiEndpoint = "results" this.httpRequestService.getApi(apiEndpoint, false).subscribe(resultRequest => { this.serviceResults = resultRequest; // This is Array to MyModel this.serviceResults.sort((a, b) => new Date(b.createddate).getTime() - new Date(a.createddate).getTime()); console.log(this.serviceResults) this.approvedResults = this.serviceResults.find(item => item.boolresult == true) // I Tried this console.log(this.approvedResults) }) }
解决方案
find方法的特性就是只返回数组中第一个满足条件的元素,要获取所有符合条件的元素,你需要用filter方法——它会遍历整个数组,把所有匹配条件的元素收集成一个新数组返回。
修改后的代码如下:
private getAllResults(){ let apiEndpoint = "results" this.httpRequestService.getApi(apiEndpoint, false).subscribe(resultRequest => { this.serviceResults = resultRequest; // This is Array to MyModel this.serviceResults.sort((a, b) => new Date(b.createddate).getTime() - new Date(a.createddate).getTime()); console.log(this.serviceResults) // 将find替换为filter this.approvedResults = this.serviceResults.filter(item => item.boolresult === true) console.log(this.approvedResults) }) }
另外,判断布尔值可以直接简化写法,代码会更简洁:
this.approvedResults = this.serviceResults.filter(item => item.boolresult)
这样approvedResults就会包含所有boolresult为true的元素了。
内容的提问来源于stack exchange,提问作者imuzz01
相关产品推荐
相关产品推荐

