atcoatco是什么co即coditio条件,atco,指为条件而生;at也来源atom,代表它是一个原子操作;把复杂的ifelse逻辑转变为简单的原子操作,就在atco。atco的目标
和复杂的ifelse说再见
为什么具体见使用atco告别混乱的ifelse
使用方式pmistall--saveatcocostatco=require('atco');atco(coditios,states,predicate);执行逻辑根据states数组项元素,依次查找codtios对象(也可以是数组)的state0属性,得到coditos1对象,再查找coditos1的state1属性......其实相当于一个reducepredicate接收reduce传进来的每一项的codito[state],如果满足条件,predicate函数returtrue就退出查找,得到该值如果codito[state]不存在,则重新回到上层查找,层层回溯,并获取该层对象的__DEFAULT__属性,传递给predicate,同样的,如果returtrue,退出查找,得到该值。其实相当于switch内的default具体例子costimgMap={olie:{'2':{a:'img_b',b:'img_o'},'3':{a:'img_b',b:'img_p'},'4':'img_c','5':'img_d','6':'img_e'},offlie:{'2':'img_h','3':'img_i','4':'img_j','5':'img_k','6':'img_l'},__DEFAULT__:'img_a'};costoticeMap={b:{'3':'text3','5':'text5'},a:'textaaa',__DEFAULT__:'textdefault'};costisStrig=obj=>Object.prototype.toStrig.call(obj)==='[objectStrig]';atco(imgMap,['olie',3,'a'],isStrig);//'img_b'atco(imgMap,['olie',3,'c'],isStrig);//'img_a'atco(imgMap,['offlie',3,'v'],isStrig);//'img_i'atco(imgMap,['olie'],isStrig);//'img_a'atco(oticeMap,['b',1],isStrig);//'textdefault'atco(oticeMap,['a',6,1,5,6],isStrig);//'textaaa'注意
atco(oticeMap,['b'],isStrig);//udefied返回的是udefied,因为走进了switchcaseb的逻辑,但是switchcaseb是一个对象,没有满足isStrig的条件,而这里没有指定下一层状态的话,循环就会在这一层戛然而止,而不再做回溯。
更多例子可直接参考mochatest
最后希望大家用得开心。
LiceseMIT
评论