gpt4 book ai didi

javascript - 过滤后比较数组中父子字段的值

转载 作者:行者123 更新时间:2023-11-30 19:04:47 25 4
gpt4 key购买 nike

我有以下 parents 数组和 children Stackblitz :

const parents = of(
[
{ id: 1, type: 'A', children: [{ id: 3, type: 'A' }, { id: 4, type: 'C' }] },
{ id: 2, type: 'B', children: [{ id: 5, type: 'D' }, { id: 6, type: 'B' }] }
]);

我需要过滤 parent哪里有childid等于 6:

{ id: 2, type: 'B', children: [{ id: 5, type: 'D' }, { id: 6, type: 'B' }] }

为此我使用了 RxJs 运算符:

parents.pipe(
flatMap(parents => parents),
map(parent => parent.children.find(child => child.id == 6))
).subscribe(x => console.log(x));

输出如下 child :

{id: 6, type: "B"}

但我需要得到一个 Observable<boolean> 哪个值是true如果:

parent.type == child.type (In this case it would be true, e.g., 'B' == 'B')

我一直在努力FlatMap , Reduce , Filter , Find , ...

但我永远无法以 parent 结束所以我可以比较parentchild类型。

{ id: 2, type: 'B', child: { id: 6, type: 'B' } }

最佳答案

如果你替换这个:parent.children.find(child => child.id == 6)使用 parent.find(p => p.children.some(c => c.id === 6)) 然后不是接收 {id: 6, type: "B" 您将接收到所有 child 的 parent 。

如果你只想设置 id 为 6 的 child ,你可以编辑 map(parent => parent.children.find(child => child.id == 6))

 map(parent => {
parent.child = parent.children.find(c => c.id === 6);
return parent;
})

在那之后,您将不再接收 {id: 6, type: "B"},而是获得带有附加属性 child (parent.child) 的父级,其中包含 id 为 6 的子级。然后您可以检查 parent.type === parent.child.type。请注意,parent.child 可能未定义,因此需要添加额外的检查。

关于javascript - 过滤后比较数组中父子字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59105334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com