大家猴年好, 最近看到 表驅動法,剛好碰到類似的情況,於是嘗試實現.但是覺得根本沒有實現. 請看代碼. 一共有三個問題
上方的表定義 有什麼比較好的辦法嗎?雖然人工的列出了所有的可能性,但是感覺很傻... 如果在多一個條件,或N個條件,那徹底沒辦法人工枚舉了...
if 是否有優雅一點的寫法呢
為什麼我這裡 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; }
回複內容:
大家猴年好, 最近看到 表驅動法,剛好碰到類似的情況,於是嘗試實現.但是覺得根本沒有實現. 請看代碼. 一共有三個問題
上方的表定義 有什麼比較好的辦法嗎?雖然人工的列出了所有的可能性,但是感覺很傻... 如果在多一個條件,或N個條件,那徹底沒辦法人工枚舉了...
if 是否有優雅一點的寫法呢
為什麼我這裡 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中斷