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

2016-02-11 10:10:29 +08:00
 xjdata

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

  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;
        }
1984 次点击
所在节点    问与答
1 条回复
guoguoer
2016-02-11 11:30:24 +08:00
可能的几点想法:
1. 如果写表比写逻辑复杂,表可以用代码生成
2. 查找遍厉太麻烦,可以直接生成最终表,比如用一个多维数组,代码直接返回值
3. foreach 跟 for 不同,没有 break

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256055

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX