Как получить массив объектов, а не массив массивов - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь сделать какое-то отображение, чтобы получить массив объектов.

Примерно так: enter image description here

Но что я получаю отСледующий метод - это массив массивов enter image description here

this.service.getItems(this.id).pipe(
      switchMap(arr => {
        const userObservables = 
        arr.map(collects => this.afs.collection(`users`,
           (ref) => ref.where('someId', '==', collects.id)).valueChanges()
           .pipe(first())
        );
        return combineLatest(...userObservables)
            .pipe(
              map((...eusers) => {
                console.log(eusers[0]) //Should be array of objects
                arr.forEach((collect, index) => {
                  collect['username'] =  eusers[0][index]['displayName']['username'];
                  collect['first_name'] =  eusers[0][index]['displayName']['first_name'];
                  collect['last_name'] =  eusers[0][index]['displayName']['last_name'];
                  collect['avatar'] = eusers[0][index]['photoURL'];
              });
              console.log(arr)
              return arr;
            })
            );
      })
    )
    .subscribe(obj => console.log(obj));

Как мне переписать это, чтобы получить желаемый результат (массив объектов)?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

JavaScript

Метод concat () используется для объединения двух или более массивов.Этот метод не изменяет существующие массивы, но вместо этого возвращает новый массив.

const array = [['1', '2'],['1'],['1','2','3']];
const newArray = [].concat.apply([], array);

Тем не менее, Lodash и Underscore также отлично подходят для этого поведения:

Lodash

https://lodash.com/docs/#flatten

Сглаживает массив на один уровень глубины.

_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]

Я использовал lodash в Angular проекте очень просто использовать.

import * as _ from 'lodash'; 

let x = _.flatten(array.items);

npm пакет: https://www.npmjs.com/package/lodash

Подчеркивание (JS)

https://underscorejs.org/#flatten

Выравнивает вложенный массив (вложение может быть на любую глубину).Если вы передадите мелкое значение, массив будет сплющен только на один уровень ..

_.flatten([1, [2], [3, [[4]]]]);
// => [1, 2, 3, 4];

_.flatten([1, [2], [3, [[4]]]], true);
// => [1, 2, 3, [[4]]];

npm пакет: https://www.npmjs.com/package/underscore

0 голосов
/ 01 февраля 2019

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

const input = [[1], [1], [1]];
const output = [];

input.forEach(arr => arr.forEach(elem => output.push(elem)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...