1.0.4 • Published 9 years ago
atcon v1.0.4
atcon
atcon是什么
- con即
condition条件,atcon,指为条件而生; - at也来源atom,代表它是一个原子操作;
- 把复杂的
if else逻辑转变为简单的原子操作,就在atcon。
atcon的目标
和复杂的 if else 说再见
为什么
使用方式
npm install --save atcon
const atcon = require('atcon');
atcon(conditions, states, predicate);执行逻辑
- 根据
states数组项元素,依次查找condtions对象(也可以是数组)的state0属性,得到conditons1对象,再查找conditons1的state1属性...... 其实相当于一个reduce predicate接收reduce传进来的每一项的conditon[state],如果满足条件,predicate函数return true就退出查找,得到该值- 如果
conditon[state]不存在,则重新回到上层查找,层层回溯,并获取该层对象的__DEFAULT__属性,传递给predicate,同样的,如果return true,退出查找,得到该值。其实相当于switch内的default
具体例子
const imgMap = {
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'
};
const noticeMap = {
b: {
'3': 'text3',
'5': 'text5'
},
a: 'textaaa',
__DEFAULT__: 'textdefault'
};
const isString = obj => Object.prototype.toString.call(obj) === '[object String]';
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,因为走进了 switch case b的逻辑,但是switch case b是一个对象,没有满足isString的条件,而这里没有指定下一层状态的话,循环就会在这一层戛然而止,而不再做回溯。
更多例子可直接参考mocha test
最后
希望大家用得开心。