我有一个如下所示的对象:
它包含的对象也可以包含对象:它就像一棵树。
我怎样才能得到这个对象的不同分支的列表(作为列表)。
更清楚地说,对于前面的例子,我想要一个这样的列表:
[['Activity_06jvf7d','Activity_10kmald', 'Activity_1ynobrq'], ['Activity_02uytcw', 'Activity_0zjdtqq', etc.], etc.]
感谢您的帮助。
答案 0 :(得分:0)
看起来您想要的结果的键的顺序由它们在图像上的显示方式定义。但是 Javascript 对象的键没有排序。这使得结果不确定。例如,
let tree = {
alpha: {
beta: {
gamma: null
},
delta: {
epsilon: null
}
}
}
可能导致
[['alpha', 'beta', 'gamma'], ['delta', 'epsilon']]
以及
[['alpha', 'delta', 'epsilon'], ['beta', 'gamma']]
两个都好吗?
既然任何可能的结果都可以,这里有一个解决方案:
function buildKeyLists(node: any)
{
let result = [];
let current = [];
function helper(node: any) {
if (node === null) {
result.push(current);
current = [];
return;
}
for (let key in node) {
current.push(key);
helper(node[key]);
}
}
helper(node);
return result;
}
还有一个例子:
buildKeyLists({
Activity_06jvf7d: {
Activity_10kmald: {
Activity_1ynobrq: null
},
Activity_02uytcw: {
Activity_0zjdtqq: {
Activity_003ipe4: {
Activity_1wl99tz: {
Activity_0vgcvta: {
Activity_0wz8mrj: null,
},
Activity_02oisqw: {
Activity_0ibjg00: null
}
}
},
Activity_13l7ctn: {
Activity_1cpcqnx: null
}
}
}
}
});
可能会回来
[["Activity_06jvf7d", "Activity_10kmald", "Activity_1ynobrq"], ["Activity_02uytcw", "Activity_0zjdtqq", "Activity_003ipe4", "Activity_1wl99tz", "Activity_0vgcvta", "Activity_0wz8mrj"], ["Activity_02oisqw", "Activity_0ibjg00"], ["Activity_13l7ctn", "Activity_1cpcqnx"]]