
大家猴年好, 最近看到 表驱动法,刚好碰到类似的情况,于是尝试实现.但是觉得根本没有实现. 请看代码. 一共有三个问题
感谢你的回复.
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 guoguoer 2016-02-11 11:30:24 +08:00 via Android 可能的几点想法: 1. 如果写表比写逻辑复杂,表可以用代码生成 2. 查找遍厉太麻烦,可以直接生成最终表,比如用一个多维数组,代码直接返回值 3. foreach 跟 for 不同,没有 break |