Socket
Socket
Sign inDemoInstall

atcon

Package Overview
Dependencies
2
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    atcon

atom conditions


Version published
Maintainers
1
Install size
2.22 MB
Created

Readme

Source

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

最后

希望大家用得开心。

Keywords

FAQs

Last updated on 03 Mar 2017

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc