和复杂的ifelse说再见
为什么具体见使用atcon告别混乱的ifelse
使用方式npminstall--saveatconconstatcon=require('atcon');atcon(conditions,states,predicate);执行逻辑根据states数组项元素,依次查找condtions对象(也可以是数组)的state0属性,得到conditons1对象,再查找conditons1的state1属性......其实相当于一个reducepredicate接收reduce传进来的每一项的conditon[state],如果满足条件,predicate函数returntrue就退出查找,得到该值如果conditon[state]不存在,则重新回到上层查找,层层回溯,并获取该层对象的__DEFAULT__属性,传递给predicate,同样的,如果returntrue,退出查找,得到该值。其实相当于switch内的default具体例子constimgMap={online:{'2':{a:'img_b',b:'img_o'},'3':{a:'img_b',b:'img_p'},'4':'img_c','5':'img_d','6':'img_e'},offline:{'2':'img_h','3':'img_i','4':'img_j','5':'img_k','6':'img_l'},__DEFAULT__:'img_a'};constnoticeMap={b:{'3':'text3','5':'text5'},a:'textaaa',__DEFAULT__:'textdefault'};constisString=obj=>Object.prototype.toString.call(obj)==='[objectString]';atcon(imgMap,['online',3,'a'],isString);//'img_b'atcon(imgMap,['online',3,'c'],isString);//'img_a'atcon(imgMap,['offline',3,'v'],isString);//'img_i'atcon(imgMap,['noline'],isString);//'img_a'atcon(noticeMap,['b',1],isString);//'textdefault'atcon(noticeMap,['a',6,1,5,6],isString);//'textaaa'注意
atcon(noticeMap,['b'],isString);//undefined返回的是undefined,因为走进了switchcaseb的逻辑,但是switchcaseb是一个对象,没有满足isString的条件,而这里没有指定下一层状态的话,循环就会在这一层戛然而止,而不再做回溯。
更多例子可直接参考mochatest
最后希望大家用得开心。
LicenseMIT
评论