RxJs перемещает массив объектов в корневой массив

64
10

Я получаю ниже набор data через Observable

[
0: {id: "12321", itemName: "Item 1", category: "All"},
1: [
0: {id: "423423", itemName: "Sub Item 1", category: "subcat"},
1: {id: "413212", itemName: "Sub Item 2", category: "subcat"}
],
2: {id: "65655", itemName: "Item 2", category: "All"},
3: {id: "87877", itemName: "Item 3", category: "All"},
4: [
0: {id: "354345", itemName: "Sub Item 1", category: "subcat"},
1: {id: "123434", itemName: "Sub Item 2", category: "subcat"},
2: {id: "765767", itemName: "Sub Item 3", category: "subcat"},
3: {id: "854643", itemName: "Sub Item 4", category: "subcat"},
]
]

Я пытаюсь переместить все objects внутри array в root массив. Ожидаемый результат

[
0: {id: "12321", itemName: "Item 1", category: "All"},
1: {id: "423423", itemName: "Sub Item 1", category: "subcat"},
2: {id: "413212", itemName: "Sub Item 2", category: "subcat"}
3: {id: "65655", itemName: "Item 2", category: "All"},
4: {id: "87877", itemName: "Item 3", category: "All"},
5: {id: "354345", itemName: "Sub Item 1", category: "subcat"},
6: {id: "123434", itemName: "Sub Item 2", category: "subcat"},
7: {id: "765767", itemName: "Sub Item 3", category: "subcat"},
8: {id: "854643", itemName: "Sub Item 4", category: "subcat"},
]

Вот как выглядят данные на консоли

Data Sample

Ниже приводится то, что я и пробовал до сих пор.

lstCategories: Observable<any>;

this.lstCategories = .....
.flatMap(records => Observable.combineLatest(records))
.map(da => {
return da.map(mda => {
//if it is array then map each object in array.
if(mda.length){
return mda.map(smda => {
return Observable.of(smda);
})
}else {
return mda;
}
})
});

console.log(da) т.е. первая map отображает тип данных, которые я получаю. Я проверяю length каждого element в array и его отображение.

Что мне здесь не хватает?

спросил(а) 2021-01-25T15:25:59+03:00 5 месяцев назад
1
Решение
99

На основе изображения у вас есть массив объектов и массив. Вы можете сгладить его с помощью [].concat(...data). Используйте array#concat с синтаксисом распространения.

var data = [{id: "12321", itemName: "Item 1", category: "All"}, [{id: "423423", itemName: "Sub Item 1", category: "subcat"}, {id: "413212", itemName: "Sub Item 2", category: "subcat"}],{id: "65655", itemName: "Item 2", category: "All"}, {id:"87877", itemName: "Item 3", category: "All"}, [{id: "354345", itemName: "Sub Item 1", category: "subcat"}, {id: "123434", itemName: "Sub Item 2", category: "subcat"}, {id: "765767", itemName: "Sub Item 3", category: "subcat"}, {id: "854643",itemName: "Sub Item 4", category: "subcat"}]],
result = [].concat(...data);
console.log(result);

ответил(а) 2021-01-25T15:25:59+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема