javascript - 關於"表驅動法"的疑問.謝謝大家.

來源:互聯網
上載者:User
大家猴年好, 最近看到 表驅動法,剛好碰到類似的情況,於是嘗試實現.但是覺得根本沒有實現. 請看代碼. 一共有三個問題

  1. 上方的表定義 有什麼比較好的辦法嗎?雖然人工的列出了所有的可能性,但是感覺很傻... 如果在多一個條件,或N個條件,那徹底沒辦法人工枚舉了...

  2. if 是否有優雅一點的寫法呢

  3. 為什麼我這裡 return e[3]; 不會中斷 forEach呢

感謝你的回複.

function getParentId(level, focusType, addType, select_id, parent_id) {            // focusType 0 = 節點  1 = 事項            // addType 0 = 節點  1 = 事項            var default_id = 1;            var array = [                //[level,focusType,addType,returnKey]                [1, 0, 0, select_id],//選第一層節點,選節點,加節點 --> 返回 當前節點的key                [1, 1, 0, default_id],//選第一層節點,選事項,加節點 --> 返回 1                [1, 0, 1, select_id],//選第一層節點,選節點,加事項 --> 返回 當前節點的key                [1, 1, 1, parent_id],//選第一層節點,選事項,加事項 --> 返回 父節點key                [0, 1, 0, parent_id],//非第一層節點,選事項,加節點 --> 返回 父節點key                [0, 0, 0, select_id],//非第一層節點,選節點,加節點 --> 返回 當前節點的key                [0, 0, 1, select_id],//非第一層節點,選節點,加事項 --> 返回 當前節點的key                [0, 1, 1, parent_id]//非第一層節點,選事項,加事項--> 返回 父節點key            ];            /*            * 問題1 上方的表定義 有什麼比較好的辦法嗎?            * 雖然這裡人為的列出了所有的可能性,但是感覺很傻... 如果在多一個條件,或N個條件,那徹底沒辦法人工枚舉了...            * */            var id = default_id;            array.forEach(function (e) {                if (                    e[0] == level                    && e[1] == focusType                    && e[2] == addType                    /* 問題2  這裡的if 是否有優雅一點的寫法呢? */                ) {                    id = e[3];                    /* 問題3  為什麼我這裡 return e[3]; 不會中斷 forEach呢? */                }            });            return id;        }

回複內容:

大家猴年好, 最近看到 表驅動法,剛好碰到類似的情況,於是嘗試實現.但是覺得根本沒有實現. 請看代碼. 一共有三個問題

  1. 上方的表定義 有什麼比較好的辦法嗎?雖然人工的列出了所有的可能性,但是感覺很傻... 如果在多一個條件,或N個條件,那徹底沒辦法人工枚舉了...

  2. if 是否有優雅一點的寫法呢

  3. 為什麼我這裡 return e[3]; 不會中斷 forEach呢

感謝你的回複.

function getParentId(level, focusType, addType, select_id, parent_id) {            // focusType 0 = 節點  1 = 事項            // addType 0 = 節點  1 = 事項            var default_id = 1;            var array = [                //[level,focusType,addType,returnKey]                [1, 0, 0, select_id],//選第一層節點,選節點,加節點 --> 返回 當前節點的key                [1, 1, 0, default_id],//選第一層節點,選事項,加節點 --> 返回 1                [1, 0, 1, select_id],//選第一層節點,選節點,加事項 --> 返回 當前節點的key                [1, 1, 1, parent_id],//選第一層節點,選事項,加事項 --> 返回 父節點key                [0, 1, 0, parent_id],//非第一層節點,選事項,加節點 --> 返回 父節點key                [0, 0, 0, select_id],//非第一層節點,選節點,加節點 --> 返回 當前節點的key                [0, 0, 1, select_id],//非第一層節點,選節點,加事項 --> 返回 當前節點的key                [0, 1, 1, parent_id]//非第一層節點,選事項,加事項--> 返回 父節點key            ];            /*            * 問題1 上方的表定義 有什麼比較好的辦法嗎?            * 雖然這裡人為的列出了所有的可能性,但是感覺很傻... 如果在多一個條件,或N個條件,那徹底沒辦法人工枚舉了...            * */            var id = default_id;            array.forEach(function (e) {                if (                    e[0] == level                    && e[1] == focusType                    && e[2] == addType                    /* 問題2  這裡的if 是否有優雅一點的寫法呢? */                ) {                    id = e[3];                    /* 問題3  為什麼我這裡 return e[3]; 不會中斷 forEach呢? */                }            });            return id;        }

問題1,2:

表中的一個項目是用於匹配模式的資訊. 這些資訊簡單時可以用[1, 0, 0]這樣的純資料來表示 (下面那個if的實質是個把資料轉化為行為的interpreter), 複雜起來就不如用匿名函數了

問題3. 你返回什麼都不會讓forEach中斷

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.