• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

javascript – 关于"表驱动法"的疑问.谢谢大家.

php 搞代码 3年前 (2022-01-25) 26次浏览 已收录 0个评论
文章目录[隐藏]

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

  1. 上方的表定义 有什么比较好的办法吗?虽然人工的列出了所有的可能性,但是感觉很傻… 如果在多一个条件,或N个条件,那彻底没办法人工枚举了…

  2. if 是否有优雅一点的写法呢

  3. 为什么我这里 return e[3]; 不会中断 forEach呢

感谢你的回复.

<code class="js">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  <em style="color:transparent">本文来源[email protected]搞@^&代*@码)网9</em><strong>搞代gaodaima码</strong>              [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;        }</code>

回复内容:

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

  1. 上方的表定义 有什么比较好的办法吗?虽然人工的列出了所有的可能性,但是感觉很傻… 如果在多一个条件,或N个条件,那彻底没办法人工枚举了…

  2. if 是否有优雅一点的写法呢

  3. 为什么我这里 return e[3]; 不会中断 forEach呢

感谢你的回复.

<code class="js">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;        }</code>

问题1,2:

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:javascript – 关于"表驱动法"的疑问.谢谢大家.

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址