Javascript 从Promise.all&;合并数组结果;地图

Javascript 从Promise.all&;合并数组结果;地图,javascript,node.js,arrays,Javascript,Node.js,Arrays,好吧,这可能是一个愚蠢的问题,但已经很晚了,我不知道我的问题是什么 我尝试获取不同类型值的统计信息列表。映射函数中的返回值是一个数组。问题在于最终结果: // Data this._types = [{ id: 1, id: 2 }]; // First loop typeStatistics = [{ name: 'stats a' }, { name: 'stats b' }] // Second loop typeStatistics = [{ name: 'stats x' }, {

好吧,这可能是一个愚蠢的问题,但已经很晚了,我不知道我的问题是什么

我尝试获取不同类型值的统计信息列表。
映射
函数中的返回值是一个
数组
。问题在于最终结果:

// Data
this._types = [{ id: 1, id: 2 }];

// First loop
typeStatistics = [{ name: 'stats a' }, { name: 'stats b' }]

// Second loop
typeStatistics = [{ name: 'stats x' }, { name: 'stats y' }]

// End results (expected)
this._statistics = [
    { name: 'stats a' }, { name: 'stats b' },
    { name: 'stats x' }, { name: 'stats y' }]

// End results I have (wrong)
this._statistics = [
    [ { name: 'stats a' }, { name: 'stats b' } ],
    [ { name: 'stats x' }, { name: 'stats y' } ] ]
代码如下所示:

this._statistics = await Promise.all(this._types.map(async (type) => {
  const typeStatistics = await ApiClientFacade.unwrapResponse(this._api.listTypeStatistics(
    JSON.stringify({ id: type.id }),
  ));

  return typeStatistics;
}));
我还尝试了
push
和spread操作符,得到了相同的结果:

this._statistics.push(...await Promise.all(this._types.map(async (type) => {
  const typeStatistics = await ApiClientFacade.unwrapResponse(this._api.listTypeStatistics(
    JSON.stringify({ id: type.id }),
  ));

  return typeStatistics;
})));

使用
Promise.all
时,它从api/url获取的所有值,并将它们添加到数组中。如果你想把它们都放在一个数组中,那么你可以像下面那样将数组展平

const data = await Promise.all(this._types.map(async (type) => {
  const typeStatistics = await ApiClientFacade.unwrapResponse(this._api.listTypeStatistics(
    JSON.stringify({ id: type.id }),
  ));

  return typeStatistics;
}));

this._statistics = data.flat();

的结构是否为this.statistics
是数组的数组,而您正试图将它们展平为单个数组?不,是具有属性的平面对象。如果它是对象,那么您为什么要这样做
这个。\u statistics[0]
?可以共享this.statistics看起来像什么以及您希望它看起来像什么的示例结构。rry,this.statistics是一个数组。map中返回的typeStatistics是一个数组。最后,我希望所有数组类型统计信息都合并到此中。统计信息:this.statistics[0]={}this.statistics[1]={}this.statistics[n]={}可能使用
.flatMap()
中的
等待承诺。all(this.\u types.flatMap(…)
.Gotcha!我曾尝试在Promise.all().flat()的末尾执行一个flat(),但出现了错误。这可能会起作用,但请记住,这会带来性能挑战,因为实际上您正在执行一些不必要的循环。在
Promise.all()
中可能是更好的选择。你不能这样做,因为
Promise.all()
仍然没有解决。按照答案中的说明去做。@fortune是的,我想当我尝试的时候!如果解决方案对您有效,请随意接受此答案。:)