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));
}