我有一个分层对象,我通过遍历父母并对孩子进行排序来对孩子进行排序。这行得通。但是现在,我需要选择性地打破层次结构并创建新的虚拟约束。
为了说明这一点,让我们举一个男人的例子,他有x 个妻子。每个妻子,他都有y个孩子。我可以为每个妻子或每个男人的妻子排序。
Man01 Wife01a Kid01aA
Kid01aB
Wife01b Kid01bC
Kid01bD
Man02 Wife02c Kid02cE
Kid02cF
Wife02d Kid02dG
Kid02dH
让我们给他们起个名字:
Murphy Winnie Kurt
Kara
Wendy Klaus
Klea
Marley Wonda Kasper
Kyra
Wilma Kevin
Karla
并考虑在他们的父母中按字母顺序对它们进行排序:
Marley Wilma Karla
Kevin
Wonda Kasper
Kyra
Murphy Wendy Klaus
Klea
Winnie Kara
Kurt
但是现在,我们希望能够对属于男人的孩子、一般的妻子或一般的孩子进行排序?
Marley Wilma Karla
Wonda Kasper
Wilma Kevin
Wonda Kyra
Murphy Winnie Kara
Wendy Klaus
Wendy Klea
Winnie Kurt
这是一个极其简化的虚构对象。实际上,我不是按字母顺序排序,而是对许多属性进行多列排序。
可以将结果输出到表格中,但处理本身已经占用了大量时间和内存。我不想让这进一步复杂化。
如果这没有问题,我只需将对象展平为数组中的表格,将每个多列排序链接到超级多列排序,然后从最近的共同祖先开始重新组合,该共同祖先通过循环保持不变。
但我试图以更有效的方式解决这个问题,而不是将对象转换为完整的表数组。
- 我该如何解决这个问题?实际上循环遍历它们中的每一个两次?
- 对于这种我还不知道的排序,也许有一个“众所周知的”解决方案?
- 也许可以使用所有“虚拟”父母的引用创建类似表的记录,然后将这些引用分组回层次结构而不循环它们?
这是我所指的对象类型的一个示例:Object
我的意思是,字面意思是{}
,尽管当对象具有多个成员时,它包含[]
对象数组。{}
{
"men" : [
{
"name" : "Murphy",
// a lot of properties
"wifes" : [
{
"name" : "Winnie",
// a lot of properties
"kids" : [
{
"name" : "Kurt",
// a lot of properties
}, {}, {} // etc...
]
}, {}, {} // etc...
]
}, {}, {} // etc...
]
}
请注意,在这种情况下,我的示例是错误的,因为 Man、Wife 和 Kid 都是人类。但实际上有不同的对象具有不同的属性。假设有多个宇宙,我应该选择宇宙、行星、土壤或其他东西。;)