这是为了网球抽奖,我需要能够再见,所以大多数父母都有两个孩子,即。每场比赛的胜利者都会通过,但在某些情况下会有一个再见,因此只有一个孩子。请参阅此处的示例,其中一些父匹配没有子项,有些匹配一个:http://www.irtpa.com/index.php/realtennis/ladder/1246
我不认为这个答案会有所帮助:How to remove node on tree layout D3.js?
因为它假设隐藏/删除节点的所有子节点。
基于上面的stackoverflow答案,我已经得到了这个,但我的大脑无法看到删除/隐藏孩子的解决方案:
function check_children(data, parent) {
// recurse through array and toggle/hide any Match Byes
if (typeof data.data != "undefined") {
if (data.data.bye == "byeM") {
toggle(parent);
}
}
if (data.children) {
check_children(data.children[0], data);
check_children(data.children[1], data);
}
}
function toggle(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
}
答案 0 :(得分:0)
如果你想删除你的“再见”孩子,我可能会在递归前测试。如下所示:
function removeByeChildren(parent) {
if(!parent.children)
return;
var i = 0;
while(i < parent.children.length) {
var data = parent.children[i].data;
if (typeof data != "undefined" && data.bye == "byeM") {
// remove child - could save it in _children if you wanted to ever put it back
var child = parent.children.splice(i,1);
// length of child list reduced, i points to the next child
}
else {
// not a bye - recurse
removeByeChildren(parent.children[i]);
// all the child's bye's are removed so go to the next child
i++;
}
}
}
你可以玩它here。这个想法是检查每个孩子是否是再见。如果它是我们从列表中删除它,如果它不是我们递归并删除所有后代子孙。