javascript - 数组传播合并对象数组

标签 javascript arrays

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

我的数据 array 可以是任意长度,我需要将它们全部合并到 mergedResults

有什么想法吗?

   Promise.all(apiPromises).then(data => {
                let mergedResults = []
                data.forEach(function(element) {
                    const { events } = element;

                    mergedResults[...events]

                    console.log(mergedResults)
                });
   });

最佳答案

你不能在 [] 中添加一个 existing 数组,你只能创建一个新的数组(比如 concat 做):

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

...如果修改现有数组是可以接受的(但在保留原始数组很重要的情况下很常见,例如在使用不可变对象(immutable对象)编程时)。

出于这个原因,您可以使用带有展开语法的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...
});

关于javascript - 数组传播合并对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51786651/

相关文章:

php - 如何从数组中获取准确的值 - php

javascript - 拼接数组数组中的特定值

javascript - jquery中的多按键功能?

javascript - 使用 Twilio IP Messaging 进行私有(private)消息传送

javascript - 如何使用 Protractor 在 e2e 测试中预期元素的动态计数

c - 如何一次性访问数组的多个元素?

javascript - 导出时 React.Component 是默认扩展吗?

javascript - 将 Mmenu 插件集成到 Vue.js 项目

c - 在不使用 break 的情况下终止输入为 -1 时的数组输入?

python - 检查一对值是否在二维数组中 python