如何正确过滤角度数组

Posted

技术标签:

【中文标题】如何正确过滤角度数组【英文标题】:how to properly filter an array in angular 【发布时间】:2018-10-04 17:59:04 【问题描述】:

我有一个从后端拉数组的服务冰,我需要根据 ID 从数组中获取单个项目,我如何在 Angular 中做到这一点?

我正在寻找如何专门使用 angulars 可管道操作符来做到这一点。如果没有正确完成,过滤器往往会阻止一切正常工作而不会引发错误。我可以获得行信息,但我无法定位我得到的属性"Cannot read property 'id' of undefined"

【问题讨论】:

如果你发布你的代码以及到目前为止你尝试了什么 javascript: How to filter object array based on attributes?的可能重复 我正在寻找如何专门使用 angulars pipeable 运算符来做到这一点。如果没有正确完成,过滤器往往会阻止一切正常工作而不会引发错误。我可以获取行信息,但我无法定位我得到“无法读取未定义的属性 'id'”的属性 【参考方案1】:

angulars 可管道操作符

我不完全确定您所说的 angulars pipeable 运算符是什么意思。您的问题中有标签 rxjs-pipeable-operators,所以我希望您的意思是一般意义上的 rxjs 运算符。

所以我假设你真正想要做什么。如果我理解错了,请发表评论。

你有一个从数组中返回 Observable 的服务。像这样的:

function getMyData(): Observable<any[]> 
    return Observable.create(observer => 
        observer.next([
             name: 'value 1', id: 1 ,
             name: 'value 2', id: 2 ,
             name: 'value 3', id: 3 
        ]);

    );

如果要修改此 observable 流中的值,则不能直接在流上使用 filter 或 find。您收到的值是完整的数组,因此查找操作是在数组对象上执行的,而不是在单个项目上执行。您要做的是映射结果值并在映射函数中对其进行过滤。

getMyData()
    .map((theArray: any[]) => theArray.find(item => item.id === 2))

【讨论】:

【参考方案2】:

我需要根据 ID 从数组中获取单个项目

试试Array.find()

let data = yourArray.find(x => x.id == "en-gb");

或尝试array().filter().shift()

请通过下面的讨论

Difference between find() and filter().shift() on javascript

【讨论】:

这正是我所需要的谢谢。我需要重写代码,过滤器最初工作得很好,但重写后它根本停止产生任何结果。【参考方案3】:
 this.booksByStoreID = this.books.filter(
      book => book.store_id === this.store.id);

How do I filter an array with TypeScript in Angular 2?

【讨论】:

【参考方案4】:

用于数组中的单个项目。

let selectedId = Array.find(a => a.id == 'fr-fr');

【讨论】:

以上是关于如何正确过滤角度数组的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中过滤数据并使用角度js应用无限滚动?

如何根据使用角度 7 中的键的条件检查来过滤 json 响应中的数组

角度过滤器 Observable 数组

数组内的角度过滤器数组

角度8-按数字过滤对象数组

根据类别使用角度材料复选框过滤课程