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

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

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

【问题讨论】:

  • 如果你发布你的代码以及到目前为止你尝试了什么
  • 我正在寻找如何专门使用 angulars pipeable 运算符来做到这一点。如果没有正确完成,过滤器往往会阻止一切正常工作而不会引发错误。我可以获取行信息,但我无法定位我得到“无法读取未定义的属性 'id'”的属性

标签: angular rxjs-pipeable-operators


【解决方案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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-29
        • 1970-01-01
        • 2017-09-11
        • 2020-07-12
        • 2013-08-17
        • 2021-04-01
        • 2017-06-20
        相关资源
        最近更新 更多