Создать один массив, содержащий значения объектов, отправленных из родительского компонента - PullRequest
0 голосов
/ 26 февраля 2020

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

объектов, отправленных из родительского 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. ..]? карта? pu sh?

РЕДАКТИРОВАТЬ: я сделал некоторые изменения и передал данные в виде объекта для ребенка с 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

Ответы [ 2 ]

0 голосов
/ 27 февраля 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);
    });
});
0 голосов
/ 26 февраля 2020

Вы должны быть в состоянии сделать это с map из Rx js и 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 оператор для отладки, вы можете убрать занавес и посмотреть, что происходит в этот момент времени с помощью наблюдаемых.

...