如何使用扩展语法合并对象数组?
我的数据 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/