替代if else连锁店

时间:2018-07-13 11:05:22

标签: javascript ecmascript-6

请检查下面的代码

   if( x > 10 && x <= 100 ){
      do.something(1)
    }
    else if ( x > 100 && x <= 1000 ) {
      do.something(2)
    }
    else if ( x > 1000 && x <= 10000 ) {
      do.something(3)
    }
    else if ( x > 10000 && x <= 100000 ) {
      do.something(4)
    }
  1. 如果/其他或交换链,还有更好的替代方法吗?
  2. 我们可以使其可配置吗?这样我就可以将所有条件和相应的动作保留在一个数据结构中,并编写可以从该结构中选取所有条件并相应地执行操作的代码?这将帮助我将所有条件保存在单独的conf文件中,并且只需对其进行编辑而不用触摸代码即可。

注意:这些范围可能不一致,例如100-200、345-956、1000-1200

3 个答案:

答案 0 :(得分:1)

您可以获取一个数组,并使用Array#some的支撑电路查找范围。

var value = 300;
    values = [
        [10, () => undefined],
        [100, () => do.something(1)],
        [1000, () => do.something(2)],
        [10000, () => do.something(3),
        [100000, () => do.something(4)]
    ];

values.some(([v, f]) => {
    if (value <= v) {
        f();
        return true;
    }
});

答案 1 :(得分:0)

这将使其可配置。

const cond = [
  {min: 10, max: 100, val: 1},
  {min: 100, max: 1000, val: 2},
  {min: 1000, max: 10000, val: 3},
  {min: 10000, max: 100000, val: 4},
]

do.something(cond.filter(c => x > c['min'] && x < c['max'])[0]['val'])

答案 2 :(得分:-1)

  1. 我认为这是最快的方法,但不适用于IE check here
  2. 是的,您可以将其编写为例如.json或.env文件,然后读取。