当Promise.all
完成时,它返回包含数据的数组数组。在我的例子中,数组只是数字:
[
[ 1, 4, 9, 9 ],
[ 4, 4, 9, 1 ],
[ 6, 6, 9, 1 ]
]
数组可以是任何大小。
目前我正在这样做:
let nums = []
data.map(function(_nums) {
_nums.map(function(num) {
nums.push(num)
})
})
有没有其他方法可以做到这一点? lodash
是否有任何能够执行此操作的功能?
答案 0 :(得分:6)
data.reduce(function (arr, row) {
return arr.concat(row);
}, []);
或者,concat
和apply
:
Array.prototype.concat.apply([], data);
答案 1 :(得分:4)
我会这样做;
var a = [
[ 1, 4, 9, 9 ],
[ 4, 4, 9, 1 ],
[ 6, 6, 9, 1 ]
],
b = [].concat(...a)
console.log(b)

答案 2 :(得分:2)
您实际上不需要任何类型的库,您可以concat
使用apply
:
Promise.all(arrayOfPromises).then((arrayOfArrays) {
return [].concat.apply([], arrayOfArrays);
});
但是,如果您使用的是lodash,则可以使用_.flatten(arrayOfArrays)
获得相同的效果。
答案 3 :(得分:0)
如果使用async / await,以扩展@Retsam的答案,您可以这样做
const mergedArray = []
.concat
.apply([], await Promise.all([promise1, promise2, promiseN]));
我使用AWS开发工具包所做的一个真实示例,它从多个IAM用户组中获取用户名列表
const users = await getActiveUsersByGroup(['group1', 'group2'])
async function getActiveUsersByGroup(groups = []) {
getUsersByGroupPromises = groups.map(group => getUsersByGroup(group));
const users = []
.concat
.apply([], await Promise.all(getUsersByGroupPromises)) // Merge (concat) arrays
.map(users => users.UserName); // Construct new array with just the usernames
return users;
}
async function getUsersByGroup(group) {
const params = {
GroupName: group,
MaxItems: 100 // Default
};
const { Users: users } = await iam.getGroup(params).promise();
return users;
}