我有一个非常基本的家谱结构,但我需要弄清楚如何让它支持多个合作伙伴和兄弟姐妹,而不需要太多冗余。
整个树的基础是创建树的人。
考虑这个非常简单的结构:
{
"name": "Me",
"dob": "1988",
"parents": [
{
"name": "Gina Carano",
"dob": "1967"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
],
"children": [
{
"name": "Tim",
"dob": "1992"
}
]
}
这很好用,但是如果我发现我有一个名叫朱迪的同父异母兄弟姐妹(成吉思汗喜欢女士们)和一个名叫布莱恩的全兄弟姐妹并将其扩展到这个呢?
{
"name": "Me",
"dob": "1988",
"parents": [
{
"name": "Gina Carano",
"dob": "1967"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
],
"children": [
{
"name": "Tim",
"dob": "1992"
}
],
"siblings": [
{
"name": "Judy",
"dob": "1987",
"parents": [
{
"name": "Courtney Carano",
"dob": "1965"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
]
},
{
"name": "Brian",
"dob": "1988",
"parents": [
{
"name": "Gina Carano",
"dob": "1967"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
]
}
]
}
这确实映射了我的 2 个新发现的兄弟姐妹,但现在我的数据有点冗余,因为成吉思汗在 3 个不同的地方。我可能会创建一个单级列表,例如:
[
{ "id": "1", "name": "Me", "dob": "1988", "parents": [2,3], "siblings": [4,5] },
{ "id": "2", "name": "Genghis Khan", "dob": "1961", "children": [1,4,5] },
{ "id": "3", "name": "Gina Carano", "dob": "1967", "children": [1] },
{ "id": "4", "name": "Tim", "dob": "1992", "parents" : [2,3] },
{ "id": "5", "name": "Judy", "dob": "1987", "parents": [2,6] },
{ "id": "6", "name": "Courtney Carano", "dob": "1965", "children": [5] }
]
如果没有太多冗余,这会以同样的方式工作吗?是否有任何可预见的情况下,在映射多个有孩子的伴侣方面会有任何限制?
注意:我想如果我保持初始结构,我必须添加 id 键以正确识别成吉思汗在所有 3 个实例中都是相同的。
我的最终目标是映射一个在视觉上将以这种方式呈现的谱系树(可能在 d3.js 中),在合作伙伴与他们的孩子之间的中间有一条线。
因此,使用上面的数据集,我正在尝试渲染: