【发布时间】:2018-05-01 23:43:06
【问题描述】:
我将 TypeScript 用于 Web 应用程序的后端,我发现交集类型对于进行高效的 SQL 查询非常有用。基本上,如果我有以下表格:
User
userId: number
userEmail: string
Post
postId: number
userId: number (FK)
postBody: string
我可以得到如下所示的交集类型(用户和帖子):
{
userId: number;
userEmail: string;
postId: number;
postBody: string;
}
这意味着我可以使用这种类型来表示我从连接的选择查询中返回的行。
问题是我必须在 Web 服务器中分离数据。我必须编写迭代代码来为每个查询对它们进行分组,这可能会重复。这是我想要实现的转变:
在:
[
{
userId: 1,
userEmail: 'user1@email.com',
postId: 1,
postBody: 'User 1\'s first post',
},
{
userId: 1,
userEmail: 'user1@email.com',
postId: 2,
postBody: 'User 1\'s second post',
},
{
userId: 2,
userEmail: 'user2@email.com',
postId: 3,
postBody: 'User 2\'s first post',
},
]
输出:
[
{
userId: 1,
userEmail: 'user1@email.com',
posts: [
{
postId: 1,
postBody: 'User 1\'s first post',
},
{
postId: 2,
postBody: 'User 1\'s second post',
}
],
},
{
userId: 2,
userEmail: 'User 2\'s email',
posts: [
{
postId: 3,
postBody: 'User 2\'s first post',
}
]
}
]
我正在尝试提出一个可以用来动态执行此操作的函数,可能会传入集合、父键名称数组和子集合的名称。我最终得到了一个不成功的函数,签名如下:function group(coll: Array<any>, parentKeys: Array<string>, childCollName: string): Array<any>;
我想知道是否有人可以帮助我实现这一点。
到目前为止,我已经尝试过使用 Lodash。但是,它的groupBy 函数似乎无法判断子对象是否相等,并且在此示例中它仍然为我提供了一个包含三个对象的数组。
【问题讨论】:
标签: javascript arrays typescript grouping