atom condtions
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.babelrc
.gitignore
LICENSE
README.md
README2.md
index.js
package.json
test.js

README.md

atcon

atcon是什么

  1. con即condition条件,atcon,指为条件而生;
  2. at也来源atom,代表它是一个原子操作;
  3. 把复杂的if else逻辑转变为简单的原子操作,就在atcon。

atcon的目标

和复杂的 if else 说再见

为什么

具体见使用atcon告别混乱的if else

使用方式

npm install --save atcon
const atcon = require('atcon');
atcon(conditions, states, predicate);

执行逻辑

  1. 根据states数组项元素,依次查找condtions对象(也可以是数组)的state0属性,得到conditons1对象,再查找conditons1state1属性...... 其实相当于一个reduce
  2. predicate接收reduce传进来的每一项的conditon[state],如果满足条件,predicate函数 return true 就退出查找,得到该值
  3. 如果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

最后

希望大家用得开心。

License

MIT