javascript - 关于"表驱动法"的疑问.谢谢大家.
大家猴年好, 最近看到 表驱动法,刚好碰到类似的情况,于是尝试实现.但是觉得根本没有实现. 请看代码. 一共有三个问题
上方的表定义 有什么比较好的办法吗?虽然人工的列出了所有的可能性,但是感觉很傻... 如果在多一个条件,或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中断

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。
