our data structure is a nested array with objects
interface dtModel {
id: number;
permission: number;
childs: dtModel[];
}
const data: dtModel[] = [
{
id: 1,
permission: 2,
childs: [
{
id: 2,
permission: 1,
childs: [
{
id: 3,
permission: 3,
childs: [],
},
],
},
],
},
{
id: 4,
permission: 1,
childs: [
{
id: 5,
permission: 2,
childs: [
{
id: 6,
permission: 3,
childs: [
{
id: 7,
permission: 1,
childs: [],
},
],
},
],
},
],
},
];
I tried with help of RxJs to create a flattened array like this which is I'm not succeeded yet
[
{id:1,permission:2},
{id:2,permission:1},
{id:3,permission:3},
{id:4,permission:1},
{id:5,permission:2},
{id:6,permission:3},
{id:7,permission:1}
]
I tried to do that with help of 'reduce' but because my childs' property does not always have the same length I couldn't do that with this approach.
of(data)
.pipe(
map((items: dtModel[]) => {
return items.reduce((res, curr) => {
res.push({ id: curr.id, permission: curr.permission });
return res;
}, []);
})
)
.subscribe(console.log);