Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js d3树-限制从搜索返回的节点数_D3.js - Fatal编程技术网

D3.js d3树-限制从搜索返回的节点数

D3.js d3树-限制从搜索返回的节点数,d3.js,D3.js,我想限制在树上搜索返回的叶节点的数量,这样返回的树就不会过于杂乱 搜索节点标签: $( "#searchText" ).on( 'keyup', function ( e ) { if ( e.keyCode === 13 ) { clearAll( root ); expandAll( root ); update( root );

我想限制在树上搜索返回的叶节点的数量,这样返回的树就不会过于杂乱

搜索节点标签:

        $( "#searchText" ).on( 'keyup', function ( e ) {
            if ( e.keyCode === 13 ) {
                clearAll( root );
                expandAll( root );
                update( root );
                searchField = "d.name";
                searchText = e.target.value;
                //console.log(searchText);
                searchTree( root );
                root.children.forEach( collapseAllNotFound );
                update( root );
            }
        } );
树上的搜索功能是:

    function searchTree( d ) {
        if ( d.children )
            d.children.forEach( searchTree );
        else if ( d._children )
            d._children.forEach( searchTree );
        var searchFieldValue = eval( searchField );
        if ( searchFieldValue && searchFieldValue.toLowerCase().match( searchText.toLowerCase() ) ) {
            // Walk parent chain
            var ancestors = [];
            var parent = d;
            while ( typeof ( parent ) !== "undefined" ) {
                ancestors.push( parent );
                //console.log(parent);
                parent.class = "found";
                parent = parent.parent;
            }
            //console.log(ancestors);
        }
    }
例如,在下面的fiddle链接中,有32个子节点的标签包含“Mary”,例如“Mary x”

如果返回的节点数大于20,则树将保持折叠状态,并显示警报“匹配的节点太多。请优化搜索条件”。否则,搜索中的节点数为20或更少,然后展开树以显示节点


添加计数搜索结果函数,如下所示

function getSimilarLeafCnt(d, countSum=0) {
   if ( d.children ) {
        countSum = d.children.reduce( (m,d)=>{return getSimilarLeafCnt(d,m);} , countSum);
    }else if ( d._children ){
        countSum = d._children.reduce( (m,d)=>{return getSimilarLeafCnt(d,m);} , countSum);
    }

    var searchFieldValue = eval( searchField );
    if ( searchFieldValue && searchFieldValue.toLowerCase().match( searchText.toLowerCase() ) ) {
        countSum++
    }
    return countSum
}
并在搜索前调用它

...
console.log(getSimilarLeafCnt(root))
if( getSimilarLeafCnt(root)) > 20) {
    alert('too many results!')
}else {
    searchTree( root );
}..


这里的工作示例

看起来不错,但我无法让它工作。你能把这个放进我的提琴叉里吗?@illudumpu36在回答中添加提琴url!