gpt4 book ai didi

javascript - 合并多对一的对象列表

转载 作者:行者123 更新时间:2023-12-02 16:04:05 26 4
gpt4 key购买 nike

我当前有两个数据库表,代表多对一关系。事件,具有 ID(整数、自动增量、主键)和名称(varchar(255),不为 null);和 ActivitySlugs,它有一个 ID(与上面相同)、一个 slugname(非 null varchar)和一个 Activity_id(Activities.id 的外键)。

目前,我应该获得所有事件及其所有 slugs 的列表(作为一个列表),因此它看起来像这样:

[
{id: 1, name: "long name", slugs: ["nick", "names"]},
{id: 2, name: "foobar", slugs: ["foo", "bar"]}
]

天真的解决方案(也是我能想到的唯一一个)是在每个表上执行“SELECT *”,然后合并它们,但随后我得到的数据如下所示:

activities = [
{id: 1, name: "long name"},
{id: 2, name: "foobar"}
]
slugs = [
{id: 1, slugname: "nick", activity_id: 1},
{id: 2, slugname: "names", activity_id: 1},
{id: 3, slugname: "foo", activity_id: 2},
{id: 4, slugname: "bar", activity_id: 2}
]

然后我可以迭代两者并添加它们:

activities.forEach(function(activity) {
slugs = [];
activitySlugs.forEach(function(slug) {
if (slug.activity_id == activity.id) {
slugs.push(slug.name);
}
});
activity.slugs = slugs;
);

这感觉笨拙、缓慢且不精致。它肯定根本无法扩展。不幸的是,我似乎找不到更好的方法来让它们与这样的数组合并为多对一。

最佳答案

您可以构建一个 id2activity 映射来通过 ID 访问任何事件:

var id2activity = {};
activities.forEach(function(activity) {
activity.slugs = [];
id2activity[activity.id] = activity;
);

activitySlugs.forEach(function(slug) {
id2activity[slug.activity_id].slugs.push(slug.name);
});

关于javascript - 合并多对一的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com