合并多对一的对象列表
Merge many-to-one list of objects
我目前有两个数据库表,代表多对一关系。具有 ID(整数、自动增量、主键)和名称(varchar(255),而不是 null)的活动;和 ActivitySlugs,它们有一个 ID(与上面相同)、一个 slugname(不是空 varchar)和一个activity_id(外键到 Activities.id)。
目前,我应该获取所有活动及其所有 slug 的列表(作为一个列表),因此它看起来像这样:
[
{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);
});
由于一个 slug 只能属于一个活动,因此您应该迭代 slug 并附加到某个活动对象。
var activities = [
{id: 1, name: "long name"},
{id: 2, name: "foobar"}
];
var 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}
];
slugs.forEach(function(slug) {
var a = activities.filter(function(a){return a.id==slug.activity_id;});
// should check if it exists - assume that it does
if (a[0].slugs == undefined) {
a[0].slugs = [slug.id];
} else {
a[0].slugs.push(slug.id);
}
});
相关文章:
- 如何使用json将对象列表从java转换为javascript
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 用javascript从列表对象(JSON的)构建diffrent选项卡
- 如何更改列表.js列表对象中的选项
- 如何使用变量值将列表<对象>序列化为 JSON
- 将列表对象从javascript转换为JSON
- 将对象推入对象列表对象
- 如何从列表对象生成li和锚点标记
- AngularJS-通过dons't在ng模型中设置列表对象
- 隐藏一定数量的列表对象
- 要切换的Javascript类列表对象和查询选择器
- 从动态列表对象中获取对象
- jPlayer不播放播放列表对象的全局声明中的歌曲
- Spring MVC @ResponseBody, JSON, JSP.试图返回列表<对象>从控制器到JSP
- Javascript列表对象可以'不添加JSON?node . js,重火力点
- javascript从文件列表创建文件列表对象
- 流星 - 在列表对象中呈现所有者的名称
- UndefinedError:列表对象没有未定义元素