Javascript 从Promise.all合并多个数组
当Javascript 从Promise.all合并多个数组,javascript,arrays,Javascript,Arrays,当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) }) }) 有没有其他方法可以做到这一点?lo
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
是否有任何功能可以做到这一点?使用和:
或者,concat
和:
实际上,您不需要任何类型的库来执行此操作,您可以将
concat
与apply
一起使用:
Promise.all(arrayOfPromises).then((arrayOfArrays) => {
return [].concat.apply([], arrayOfArrays);
});
但是,如果您使用的是lodash,那么您可以使用展平(arrayOfArrays)
获得相同的效果
var a=[
[ 1, 4, 9, 9 ],
[ 4, 4, 9, 1 ],
[ 6, 6, 9, 1 ]
],
b=[].concat(…a)
log(b)
如果使用async/await来扩展@Retsam的答案,您可以这样做
const mergedArray = []
.concat
.apply([], await Promise.all([promise1, promise2, promiseN]));
我使用AWS SDK做的一个真实示例,从多个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;
}
你能把他们都干掉吗
.concat([],promise\u results)
可能会这样做吗?一般来说,如果您没有使用map
的返回值,则不应该使用map
。如果您只是想迭代,请使用forEach
。快速提问,在使用联系人时,这是原型链接吗。应用(…)
?谢谢你,你的解决方案让我很高兴:-)为这个复杂的真实示例赢得了荣誉
const mergedArray = []
.concat
.apply([], await Promise.all([promise1, promise2, promiseN]));
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;
}