【发布时间】:2019-01-18 16:25:00
【问题描述】:
嗯,我有一个包含对象的数组,其中一些元素依赖于其他元素。
因此,我需要按重要性(父级的依赖关系)对其进行排序,以将其存储在数据库中,并用各自的父级 id 替换所有子级的 parent 属性。
数组示例:
[
{
"id": 1,
"email": "a@b.com", // unique
"parent": "c@b.com" // is nullable
},
{
"id": 2,
"email": "b@b.com",
"parent": null
},
{
"id": 3,
"email": "c@b.com",
"parent": "b@b.com"
},
{
"id": 4,
"email": "d@b.com",
"parent": "a@b.com"
},
...
]
依赖的图示:
预期结果: 按依赖(父)排序:
[
{
"id": 2,
"email": "b@b.com",
"parent": null
},
{
"id": 3,
"email": "c@b.com",
"parent": 2
},
{
"id": 1,
"email": "a@b.com",
"parent": 3
},
{
"id": 4,
"email": "d@b.com",
"parent": 1
},
...
]
设置各自的父 id 我正在使用(但它没有按父级别排序:父、子、孙...):
let users = [
{
"id": 1,
"email": "a@b.com", // unique
"parent": "c@b.com" // is nullable
},
{
"id": 2,
"email": "b@b.com",
"parent": null
},
{
"id": 3,
"email": "c@b.com",
"parent": "b@b.com"
},
{
"id": 4,
"email": "d@b.com",
"parent": "a@b.com"
}
];
users = users.map(user => {
user.parent = _.findIndex(users, i => user.parent === i.email);
return user;
});
附注:
在这种情况下,importance 概念指的是parent 级别。
所以,首先我需要父母,然后是孩子、孙子等等……
如果这个帖子解释不好,我很抱歉,如果你有疑问,我会寻找最好的方式来表达这个想法。
【问题讨论】:
-
“重要性”是什么意思?哪个元素是“最重要的”?
-
@quirimmo 好问题,我刚刚为您的问题添加了答案。顺序是父母,孩子,孙子,...
-
在您的示例中,
parent指的是父级的email属性,但在您想要的输出中,它们切换到id。这是故意的吗? 编辑: 没关系,我看到你提到过这个:“用各自的 ID 替换孩子。” -
@TylerRoper 在几秒钟内我说“所以,我需要按重要性(父级的依赖性)对其进行排序以存储在数据库中并用相应的 ID 替换子级。”其中各自的 Id 是父母
-
你想要一个树遍历。您所描述的可能听起来像广度优先遍历或预排序深度优先遍历。您的样本太小,无法知道您要查找的样本。请使用这些术语进行搜索。
标签: javascript arrays sorting lodash topological-sort