Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 验证阵列中的对象是否也存在于可观察阵列中_Angular_Typescript_Rxjs_Observable - Fatal编程技术网

Angular 验证阵列中的对象是否也存在于可观察阵列中

Angular 验证阵列中的对象是否也存在于可观察阵列中,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我想验证以下数组中的对象: const payment1: Payment = new Payment('1000'); // 1000 = id const payment2: Payment = new Payment('1001'); const paymentArray: Payment[]; paymentArray.push(payment1, payment2); 存在于我的可观察阵列中: payments$: Observable<Payment[]>; 您可以

我想验证以下数组中的对象:

const payment1: Payment = new Payment('1000'); // 1000 = id
const payment2: Payment = new Payment('1001');

const paymentArray: Payment[];
paymentArray.push(payment1, payment2);
存在于我的可观察阵列中:

payments$: Observable<Payment[]>;

您可以这样做,另请参见我的stackblitz链接:

您可以使用toPromise获得可观察的结果,如下所示:

const payment1: string = '1000';
const payment2: string = '1001';

const paymentArray: string[] = [];
paymentArray.push(payment1, payment2);

const payments$ = of(['1000', '1001', '1002']);

const allExist = await from(paymentArray).pipe(withLatestFrom(payments$), every(([item, payments]) => payments.includes(item))).toPromise();

如果它是一个对象数组,则创建这些元素的映射,以便在filter函数中对其进行比较

ngOnInit() {

    this.idsToFind = ['1000', '1231', '2323'];
    const paymentArray: Payment[] = [];
    const payment1: Payment = new Payment('1000'); // 1000 = id
    const payment2: Payment = new Payment('1001');

    paymentArray.push(payment1, payment2);

    this.payments$ = of(paymentArray);

    const idsMap = this.idsToFind.reduce(
      (a, b) => { return { ...a, [b]: true } }, {}
    );
    console.log(idsMap);

    this.payments$
      .pipe(
        map((payments) =>
          payments.filter(
            (payment: Payment) => idsMap[payment.id])
        )
      )
      .subscribe((missings) => console.log(missings));

  }

您只需要通过可观察的管道并映射流。在map的回调中,检查值中是否存在每个item paymentArray

请参见以下示例:

const id=paymentArray.mapp=>p.id; 这是一个.payments.pipe mappayments=>{ const paymentIds=payments.mapp=>p.id; return id.everyid=>paymentId.includeId; } //'value'应根据检查结果打印'true'或'false'。 .subscribevalue=>console.logvalue;
const payment1: string = '1000';
const payment2: string = '1001';

const paymentArray: string[] = [];
paymentArray.push(payment1, payment2);

const payments$ = of(['1000', '1001', '1002']);

const allExist = await from(paymentArray).pipe(withLatestFrom(payments$), every(([item, payments]) => payments.includes(item))).toPromise();
ngOnInit() {

    this.idsToFind = ['1000', '1231', '2323'];
    const paymentArray: Payment[] = [];
    const payment1: Payment = new Payment('1000'); // 1000 = id
    const payment2: Payment = new Payment('1001');

    paymentArray.push(payment1, payment2);

    this.payments$ = of(paymentArray);

    const idsMap = this.idsToFind.reduce(
      (a, b) => { return { ...a, [b]: true } }, {}
    );
    console.log(idsMap);

    this.payments$
      .pipe(
        map((payments) =>
          payments.filter(
            (payment: Payment) => idsMap[payment.id])
        )
      )
      .subscribe((missings) => console.log(missings));

  }