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;
}