如何使用扩展语法合并对象数组?
我的数据array
可以是任意长度,我需要将它们全部合并成mergedResults
有什么想法吗?
Promise.all(apiPromises).then(data => {
let mergedResults = []
data.forEach(function(element) {
const { events } = element;
mergedResults[...events]
console.log(mergedResults)
});
});
答案 0 :(得分:3)
您必须推动它们:
mergedResults.push(...events);
如果您这样做:
mergedResults[ something ]
那只是属性访问。
答案 1 :(得分:3)
您无法添加到在[]
内部散布的现有数组,只能创建一个 new 数组(就像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...
});