Javascript 数组扩展合并对象数组
如何使用扩展语法合并对象数组 我的数据Javascript 数组扩展合并对象数组,javascript,arrays,Javascript,Arrays,如何使用扩展语法合并对象数组 我的数据array可以是任意长度,我需要将它们全部合并到mergedResults 有什么想法吗 Promise.all(apiPromises).then(data => { let mergedResults = [] data.forEach(function(element) { const { events } = element;
array
可以是任意长度,我需要将它们全部合并到mergedResults
有什么想法吗
Promise.all(apiPromises).then(data => {
let mergedResults = []
data.forEach(function(element) {
const { events } = element;
mergedResults[...events]
console.log(mergedResults)
});
});
你必须推动他们:
mergedResults.push(...events);
如果您这样做:
mergedResults[ something ]
这只是一个属性访问。您不能添加到具有内部排列的现有数组中。[],您只能创建一个新数组(如concat
所做的):
…如果修改现有数组是可以接受的,则这不是非常有效(但在保留原始数组很重要的情况下,例如使用不可变对象编程时,这是很常见的)
因此,您可以将push
与扩展语法一起使用:
mergedResults.push(...events);
旁注:您可以在
forEach
参数列表中使用destructuring,而不是作为单独的语句:
Promise.all(apiPromises).then(data => {
let mergedResults = [];
data.forEach(({events}) => {
// -----------^^^^^^^^
mergedResults.push(...events);
});
// ...presumably do something with `mergedResults` here...
});
甚至还可以加入,用于:
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...
});
这就是W的意思。:-)@克劳德:是的,当我加入时,我仍然关心我的隐私,但我现在放弃了…:)(你仍然需要谷歌搜索才能找到关于我的任何有意义的东西,所以…)你试图将数组中的每个对象合并到一个结果对象中?你能给出一个输入和期望输出的例子吗?
Promise.all(apiPromises).then(data => {
let mergedResults = data.reduce((results, {events}) => {
results.push(...events);
return results;
}, []);
// ...presumably do something with `mergedResults` here...
});