理解javascript中的决策表

时间:2015-08-04 09:18:12

标签: javascript

我刚刚浏览了Jbox代码并浏览了以下代码片段:

// Internal functions, used to easily get values
    this._getOpp = function(opp) { 
      return {left: 'right', 
      right: 'left', 
      top: 'bottom', 
      bottom: 'top',
      x: 'y', 
      y: 'x'}[opp]; 
    };

他似乎在互相交换价值观,但是,到底做了什么[反对]呢?这是我的问题,使用_getOpp函数的例子是 HERE 。我在JavaScript中从未见过这样的东西,任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

这是一种技术,我知道它是一个决策表(a wrote a blog post about them a while ago),但其他人可能会用不同的名称来称呼它。

它使用方括号表示法的方式与引用数组索引的方式相同:

var arr = [0, 2, 3];
return arr[1]; // return the second value in the array

因为对象属性是key / value对,所以它的工作原理如下:

  return {
    left: 'right', 
    right: 'left', 
    top: 'bottom', 
    bottom: 'top',
    x: 'y', 
    y: 'x'
  }[opp]

它实际上会将字符串value返回到key opp

即。如果opp为“正确”,则会返回“左”。

n.b。 wiki page on decision tables也值得一读

答案 1 :(得分:1)

首先使用值创建object,然后在其键为给定attr的对象中返回特定的opp。如果没有建立这样的密钥,则返回undefined

您可以将其视为:

var states= {
    left: 'right', 
    right: 'left', 
    top: 'bottom', 
    bottom: 'top',
    x: 'y', 
    y: 'x'
};
return settings[opp];

该片段展示了它的行为方式。

var getOpp = function(opp) { 
      return {left: 'right', 
      right: 'left', 
      top: 'bottom', 
      bottom: 'top',
      x: 'y', 
      y: 'x'}[opp]; 
};

console.log(getOpp('right'));
console.log(getOpp('oops'));