我正在尝试进行一些映射以得出对象数组。
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));
我应该如何重写它以获得我想要的结果(对象数组)?
答案 0 :(得分:1)
JavaScript
concat()方法用于合并两个或多个数组。这个方法 不会更改现有数组,而是返回一个新数组。
const array = [['1', '2'],['1'],['1','2','3']];
const newArray = [].concat.apply([], array);
对于这种行为,Lodash和Underscore也很棒而且更干净:
Lodash
https://lodash.com/docs/#flatten
Flattens数组深达一个级别。
_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]
我在 Angular 项目中使用了 lodash ,它非常易于使用。
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]]];
答案 1 :(得分:0)
您可以为每个样式循环使用一个简单的函数,将所有内容推入新数组。
const input = [[1], [1], [1]];
const output = [];
input.forEach(arr => arr.forEach(elem => output.push(elem)));