1. 程式人生 > 實用技巧 >遞迴呀遞迴,簡單的2種方法=前端js一個遞迴+後端C#一個遞迴

遞迴呀遞迴,簡單的2種方法=前端js一個遞迴+後端C#一個遞迴

1.擺資料來源

2.前端js遞迴==>對SUM動態計算值,將算力放在前端瀏覽器

    //===>呼叫遞迴的函式--獲取原始資料+呼叫遞迴
     function gettreeList() {
        $.ajax({
            url: "/B_Certificate/GetTreeData",//傳送請求的地址  
            type: "POST",// POST,預設是GET  
            dataType: 'json',//根據返回資料型別可以有這些型別可選:xml html script json jsonp text
            async: true,//是否非同步請求
            success: function (data) {//請求成功  
                setNodeChildren(-1, data)
                console.log(data)
            },
        });
    }

    //===>遞迴函式
    //對SUM動態計算值,算力轉移至前端瀏覽器
    function setNodeChildren(pid, treeList) {
        for (var i = 0; i < treeList.length; i++) {
            if (treeList[i].PID == pid) {
                setNodeChildren(treeList[i].ID, treeList)
            }
        }
    //以下為遞迴到最終節點的操作
        for (var j = 0; j < treeList.length; j++) {
            if (pid == treeList[j].ID) {

                for (var n = 0; n < treeList.length; n++) {
                    if (treeList[n].ID == treeList[j].PID) {
                        treeList[n].SUM += treeList[j].SUM
                    }
                }
            }
        }
    }

3.後端C#遞迴==>後端直接生成資料


 //遞迴
        public void setTreeData(string pid,DataTable dt)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["PID"].ToString()== pid)
                {
                    setTreeData(dt.Rows[i]["ID"].ToString(), dt);
                }
            }
    //以下為遞迴到最終節點的操作
            for (int n = 0; n < dt.Rows.Count; n++)
            {
                //找到最終子節點
                if (dt.Rows[n]["ID"].ToString()==pid)
                {
                    for (int m = 0; m < dt.Rows.Count; m++)
                    {
                        //找到父節點
                        if (dt.Rows[m]["ID"].ToString()== dt.Rows[n]["PID"].ToString())
                        {
                            //將最終子節點的SUM+=給父節點的SUM
                            dt.Rows[m].BeginEdit();//開始編輯行
                            dt.Rows[m]["SUM"] = Convert.ToInt32(dt.Rows[m]["SUM"]) + Convert.ToInt32(dt.Rows[n]["SUM"]);
                            dt.Rows[m].EndEdit();//結束編輯
                            dt.AcceptChanges();//儲存修改的結果。
                        }
                    }

                }
            }
        }