代码之家  ›  专栏  ›  技术社区  ›  Bomber

数组排列合并对象数组

  •  2
  • Bomber  · 技术社区  · 6 年前

    如何使用扩展语法合并对象数组?

    array 可以是任意长度,我需要把它们组合成 mergedResults

    有什么想法吗?

       Promise.all(apiPromises).then(data => {
                    let mergedResults = []
                    data.forEach(function(element) {
                        const { events } = element;
    
                        mergedResults[...events]
    
                        console.log(mergedResults)
                    });
       });
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   T.J. Crowder    6 年前

    不能添加到 [] ,您只能创建 新的 concat 是否):

    mergedResults = [...mergedResults, ...events];
    

    因此,你可以使用 push 改为使用扩展语法:

    mergedResults.push(...events);
    

    forEach 参数列表而不是单独的语句:

    Promise.all(apiPromises).then(data => {
        let mergedResults = [];
        data.forEach(({events}) => {
        // -----------^^^^^^^^
            mergedResults.push(...events);
        });
        // ...presumably do something with `mergedResults` here...
    });
    

    甚至有可能扔进去 for-of

    Promise.all(apiPromises).then(data => {
        let mergedResults = [];
        for ({events} of data) {
            mergedResults.push(...events);
        }
        // ...presumably do something with `mergedResults` here...
    });
    

    或者与访问所有元素的所有数组操作一样,您可以将其放入 reduce ,但你不会从中得到任何好处,这只会让事情变得更复杂:

    Promise.all(apiPromises).then(data => {
        let mergedResults = data.reduce((results, {events}) => {
            results.push(...events);
            return results;
        }, []);
        // ...presumably do something with `mergedResults` here...
    });
    
        2
  •  3
  •   Jonas Wilms    6 年前

    你必须推动他们:

      mergedResults.push(...events);
    

      mergedResults[ something ]
    

    那只是一个财产通道。