代码之家  ›  专栏  ›  技术社区  ›  Tenusha Guruge

如何将多个数组聚合为一个数组

  •  0
  • Tenusha Guruge  · 技术社区  · 5 年前

    我必须多次调用端点,并将响应聚合到一个数组中。以下是端点的响应;

    {
       items: [
          {key1: value},
          {key2: value}
       ]
    }
    

    下面是多次调用端点的代码;

    const chunkedArray = getChunkedArray(largeArray);
    const result = await Promise.all(
       chunkedArray.map(async (items) => {
          const response = await ....get(`http:/url/${items}`);
          return response.items;
       });
    );
    
    

    我得到的结果是:;

    [
       [
          {key1: value},
          {key2: value}
       ],
       [
          {key3: value},
          {key4: value}
       ]
    ]
    

    我想要的是一个聚合数组,如下所示;

    [
       {key1: value},
       {key2: value},
       {key3: value},
       {key4: value}
    ]
    

    这样做的最佳方式是什么?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Tushar Shahi    5 年前

    尝试使用 Array.prototype.flat() ;

    let arr1 = [
       [
          {key1: value},
          {key2: value}
       ],
       [
          {key3: value},
          {key4: value}
       ]
    ]
    
    let arr2 = arr1.flat(); 
    /* [
          {key1: value},
          {key2: value},
          {key3: value},
          {key4: value}
       ] */
    
    
    

    如果你想在没有平面的情况下做到这一点,你也可以使用reduce:

    let promises = Promise.all(
       chunkedArray.map(async (items) => {
          const response = await ....get(`http:/url/${items}`);
          return response.items;
       });
    );
    
    const result =promises.reduce((cum,x) => {
    let newArr = await x;
    return [...cum,...newArr ];
    },[]);