作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想从具有“父”和“子”值的模型分支制作类似思维导图的东西。看起来像:
Branches = [{
children: {},
_id: String,
parent: { type: Schema.Types.ObjectId, ref: 'Branch' }
}]
我想得到类似的东西:
[
{
"_id": "599c1f79f339dc3991d8250a",
"name": "Robert",
"children": [
{
"_id": "599c1f82f339dc3991d8250b",
"name": "Robert 1",
"parent": "599c1f79f339dc3991d8250a",
"children": [
{
"_id": "599c1f8ff339dc3991d8250c",
"name": "Robert 2",
"parent": "599c1f82f339dc3991d8250b",
"children": [
{
"_id": "599c2b7373a7d43e5205af1f",
"name": "Robert 4",
"parent": "599c1f8ff339dc3991d8250c",
"__v": 0,
"shareholder": [],
"createdDate": "2017-08-22T13:02:43.290Z",
"children": []
}
],
"__v": 0,
"shareholder": [],
"createdDate": "2017-08-22T12:11:59.230Z"
},
{
"_id": "599c1f9df339dc3991d8250d",
"name": "Robert 3",
"parent": "599c1f82f339dc3991d8250b",
"children": [],
"__v": 0,
"shareholder": [],
"createdDate": "2017-08-22T12:12:13.156Z"
}
],
"__v": 0,
"shareholder": [],
"createdDate": "2017-08-22T12:11:46.938Z"
}
],
"__v": 0,
"parent": null,
"shareholder": [],
"createdDate": "2017-08-22T12:11:37.005Z"
}
]"
如果一个对象的值是 parent "1 ",那么 _id : "1"的分支必须在 children 对象中有他。我现在的代码是:
Branch.find((err, foundedBranches) => {
function createTree(branch) {
function inner(parent) {
return branch.filter(x => x.parent === parent)
.map(x => {
x.children = inner(x._id)
return x
})
}
return inner(null)
}
let formated = createTree(branches)
res.json(formated)
如果您知道我该如何解决,请帮忙:/
最佳答案
像这样的事情怎么样 - 你会为每个条目得到 child
// All items from database
const dataFromDatabase = // ...
// For each item, go and look for childrens
const finalMap = dataFromDatabase.map((x) => {
children: this.getChildren(dataFromDatabase, x._id),
_id: x._id,
// ...
});
// Get all children and for theses children go for children aswell (recursive)...
getChildren(all, id) {
return all.reduce((tmp, x) => {
if (x.parent === id) {
return [
...tmp,
{
children: this.getChildren(all, x._id),
_id: x._id,
// ...
},
];
}
return tmp;
}, []);
}
如果您希望条目只出现一次,请在开始时过滤条目以仅获取头部(没有父条目的条目)
dataFromDatabase.filter(x => !x.parent).map((x) => {
关于node.js - 创建mongodb对象的思维导图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46071374/
我是一名优秀的程序员,十分优秀!