0

これはテニスの抽選用で、さようならができる必要があるので、ほとんどの親には2人の子供がいます。各試合の勝者は通過しますが、場合によってはさようならがあるので、子供は1人だけです。一部の親の一致に子がなく、一部に子がある例として、ここを参照してください:http ://www.irtpa.com/index.php/realtennis/ladder/1246

私はこの答えが役に立たないと思います:ツリーレイアウト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;
    }
}
4

1 に答える 1

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++;
    }
  }
}

ここで遊ぶことができます。アイデアは、それがさようならであるかどうか各子供をチェックすることです。そうである場合はリストから削除し、そうでない場合は再帰してすべての子孫の子を削除します。

于 2013-02-14T20:17:58.567 に答える