如果可能的话,如何避免嵌套的 forEach?
How to avoid nested forEach if it's possible?
我想改进我的代码。这是简单的 javascript 代码,我从 gitlab API 获取一些数据,我想获取 gitlab 组及其成员,然后我想为每个成员显示他的组。
let accounts = []
let subGroups = await api.getSubgroups();
subGroups = subGroups.map((group) => {
const { id, name, full_path } = group;
return {
id,
name,
full_path
}
})
subGroups = subGroups.map(async (group) => {
const { id } = group;
const groupMembers = await api.getGroupMembers(id);
return { group_id: id, groupMembers };
});
subGroups = await Promise.all(subGroups);
const map = subGroups.forEach((group) => {
group.groupMembers.forEach((member) => {
accounts.push(member)
})
})
我想先获取群组列表和群组成员。然后制作一组不同的人,然后给他们他们的小组。
请问如何删除嵌套的foreach,甚至可能吗?而且我还想问一下如何仅将成员的必要属性(例如仅名称和 ID)获取到帐户数组
如果您有一个 X x Y 数据结构,并且需要遍历所有元素,那基本上需要 X * Y 操作;如果这是逻辑要求,那么使用嵌套 forEach
完全没有错。
在现代 JS 中,有一个 .flatMap
方法可以使事情变得更好,但看起来:
const accounts = subGroups.flatMap(group => group.groupMembers);
如果您还想仅提取每个 groupMember
的某些属性,请使用您最初在重组 subGroups
对象数组时使用的相同技术。
const accounts = subGroups
.flatMap(group => group.groupMembers)
.map(({ name, id }) => ({ name, id }));
如果您只想保留 name
和 id
属性。
你可以简单地这样做:
let accounts = [];
let subGroups = await api.getSubgroups();
subGroups.forEach(group => {
let { id } = group;
let groupMembers = await api.getGroupMembers(id);
groupMembers.forEach(accounts.push)
})
我想改进我的代码。这是简单的 javascript 代码,我从 gitlab API 获取一些数据,我想获取 gitlab 组及其成员,然后我想为每个成员显示他的组。
let accounts = []
let subGroups = await api.getSubgroups();
subGroups = subGroups.map((group) => {
const { id, name, full_path } = group;
return {
id,
name,
full_path
}
})
subGroups = subGroups.map(async (group) => {
const { id } = group;
const groupMembers = await api.getGroupMembers(id);
return { group_id: id, groupMembers };
});
subGroups = await Promise.all(subGroups);
const map = subGroups.forEach((group) => {
group.groupMembers.forEach((member) => {
accounts.push(member)
})
})
我想先获取群组列表和群组成员。然后制作一组不同的人,然后给他们他们的小组。 请问如何删除嵌套的foreach,甚至可能吗?而且我还想问一下如何仅将成员的必要属性(例如仅名称和 ID)获取到帐户数组
如果您有一个 X x Y 数据结构,并且需要遍历所有元素,那基本上需要 X * Y 操作;如果这是逻辑要求,那么使用嵌套 forEach
完全没有错。
在现代 JS 中,有一个 .flatMap
方法可以使事情变得更好,但看起来:
const accounts = subGroups.flatMap(group => group.groupMembers);
如果您还想仅提取每个 groupMember
的某些属性,请使用您最初在重组 subGroups
对象数组时使用的相同技术。
const accounts = subGroups
.flatMap(group => group.groupMembers)
.map(({ name, id }) => ({ name, id }));
如果您只想保留 name
和 id
属性。
你可以简单地这样做:
let accounts = [];
let subGroups = await api.getSubgroups();
subGroups.forEach(group => {
let { id } = group;
let groupMembers = await api.getGroupMembers(id);
groupMembers.forEach(accounts.push)
})