简体   繁体   English

如何在过滤后的 Observable 上设置值

[英]How to set a value on a filtered Observable

I am using Angular 9. I getting a filtered list of objects.我正在使用 Angular 9。我得到了一个过滤的对象列表。 I would like to alter the value on the returned object.我想更改返回的 object 上的值。

I have the following code:我有以下代码:

  private setFilteredApproverOptions(): void {
    for (const field in this.approvalEditFormGroup.controls) {
      console.log(field);
      this.approvalEditFormGroup.get(field).valueChanges.subscribe(value => {
        if (value && typeof value.valueOf() === "string") {
          this.filteredApproverOptions = this._filter(value);
          this.filteredApproverOptions.forEach(person => {console.log(person)});
        }
      });
    }
  }

  private _filter(value: string): Observable<Person[]> {
    const filterValue: string = value.toLowerCase();
    let respApprovalState: Observable<Person[]> = this.getApproverOptions(filterValue);
    respApprovalState.subscribe(approverOptions => {
      return approverOptions.filter(option => (option.firstName.toLowerCase().includes(filterValue) || option.lastName.toLowerCase().includes(filterValue)));
    });
    return respApprovalState;
  }

  private getApproverOptions(searchString: string): Observable<Person[]> {
    let companyName: string = this.approvalEdit.companyName;
    let respApprovalState: Observable<Person[]> = this.service.getApprovers(companyName, searchString);

    respApprovalState.subscribe((approverOptions: Person[]) => {
      this.approverOptions = approverOptions as Person[];
      return approverOptions;
    },
    error => {
      console.log('Error calling getApprovers service', error);
      return null;
    });

    return respApprovalState;
  }

The following line:以下行:

this.filteredApproverOptions.forEach(person => {console.log(person)});

Has this output:有这个 output:

在此处输入图像描述

I would like to set the x and y values to a hard-coded value (eg 1 ).我想将xy值设置为硬编码值(例如1 )。

eg例如

x: 1, y: 1, personId: 105702...

Question问题

How can I set the above x and y values?如何设置上述xy值?

More info:更多信息:

export class Person {
    public constructor(init?: Partial<Person>) {
      Object.assign(this, init);
    }
    x: number;
    y: number;
    personId: number;
    firstName: string;
    lastName: string;
    email: string;
    companyName: string;
    staffCode: string;
  }

You just need to map your observable and then your array.你只需要 map 你的 observable 然后你的数组。 Mapping an observable works almost the same way as with an array.映射 observable 的工作方式几乎与使用数组相同。 Here you go:这里是 go:

const mapped = this.filteredApproverOptions.pipe(map(    // obs.pipe(map(...)) is changing each value coming in an observable/subject
    pArr => pArr.map(p => ({...p, x: 1, y: 1}))          // arr.map(...) is changing each value in an array
));

Now you could subscribe to it or whatever you want to do with it, like so:现在你可以订阅它或任何你想用它做的事情,像这样:

mapped.subscribe(val => console.log(val));

Reference:参考:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM