Создайте один массив, содержащий значения объектов, отправленных из родительского компонента.

Привет, мне нужно создать в угловом одиночном массиве, который содержит значения объектов, отправленных из родительского компонента.

объекты, отправленные из родительского console.log('object',o):

object {type: "TRA", designator: "EPTR130B", availabilities: Array(1), info: Array(2), geometry: {…}}
object {type: "TRA", designator: "EPTR130A", availabilities: Array(1), info: Array(2), geometry: {…}}
object {type: "TRA", designator: "EPTR25", availabilities: Array(1), info: Array(2), geometry: {…}}
...etc

передавая его дочернему компоненту с помощью:

this.dataSend.emit(object.designator);

получение данных в дочернем:

if (this.dataSend) {
    this.dataSend
    .subscribe(data => {
        console.log(data);
    });
} 

console.log(data):
EPTR130B
EPTR130A
EPTR25
...etc

Как я должен это сделать, чтобы получить массив типа [ EPTR130B, EPTR130A, EPTR25...]? карта? толкать?

РЕДАКТИРОВАТЬ: я внес некоторые изменения и передал данные как объект дочернему элементу с this.dataSend.emit({data}); и получил:

{data: Array(63)}
data: Array(63)
0: {type: "ADHOC", designator: "UAV1", availabilities: Array(1), info: Array(2), geometry: {…}}
1: {type: "TRA", designator: "EPTR130B", availabilities: Array(1), info: Array(2), geometry: {…}}
2: {type: "TRA", designator: "EPTR130A", availabilities: Array(1), info: Array(2), geometry: {…}} ...etc

person Chrobry    schedule 26.02.2020    source источник
comment
Может быть полезно: stackoverflow.com/a/45039140/38522   -  person Ben Aston    schedule 26.02.2020
comment
Я пытался сделать это таким образом, безрезультатно.   -  person Chrobry    schedule 27.02.2020


Ответы (2)


Вы должны быть в состоянии сделать это с map из Rxjs и map из массива.

Пытаться:

import { filter, map, tap } from 'rxjs/operators'
......
this.dataSend
    .pipe(
       tap((dataArray: any) => console.log(`dataArray before filter: ${dataArray}`)),
       // allow emissions where dataArray is truthy and it has length > 0
       filter((dataArray: any) => !!dataArray && dataArray.length),
       tap((dataArray: any) => console.log(`dataArray after filter: ${dataArray}`)),
       map((dataArray: any) => dataArray.map(data => data.designation)),
     )
    .subscribe(data => {
        console.log(data);
    });

======================= Редактировать ========================== ==== Используйте оператор tap для отладки, вы можете снять шторку и посмотреть, что происходит в этот момент времени с наблюдаемыми.

person AliF50    schedule 26.02.2020
comment
Таким образом я получаю dataArray.map не является функцией - person Chrobry; 27.02.2020
comment
Спасибо, однако это дает мне журнал: dataArray before filter: [object Object] - person Chrobry; 27.02.2020
comment
К сожалению нет, console.log('check',data); даже строка проверки не отображается в консоли.. - person Chrobry; 27.02.2020

Я пробовал пару вещей, и я не знаю, чистый ли это способ работы с массивами и объектами, но он работает:

.subscribe(data => {
    console.log(data);
    let arr: any[]  = [];
    Object.keys(data).forEach(function(item) {
        for(let i=0; i<data[item].length; i++){
            arr.push(data[item][i].designator);
        }
        console.log(arr);
    });
});
person Chrobry    schedule 27.02.2020