javascript - 关于"表驱动法"的疑问.谢谢大家.
高洛峰
高洛峰 2017-04-10 17:03:18
0
1
586

大家猴年好, 最近看到 表驱动法,刚好碰到类似的情况,于是尝试实现.但是觉得根本没有实现. 请看代码. 一共有三个问题

  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; }
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all (1)
迷茫

问题1,2:

表中的一个项目是用于匹配模式的信息. 这些信息简单时可以用[1, 0, 0]这样的纯数据来表示 (下面那个if的实质是个把数据转化为行为的interpreter), 复杂起来就不如用匿名函数了

问题3. 你返回什么都不会让forEach中断

    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!