JavaScript:对象文字符号中的索引



我现有项目中有以下代码。

//selectedColumn is dynamic but will have part of the string
if(selectedColumn.indexOf(const.abc) > -1 || selectedColumn.indexOf(const.abcd) > -1) //selectedColumn can be bc, ab etc
{
    //logic 1
}
if(selectedColumn.indexOf(const.xyz) > -1 || selectedColumn.indexOf(const.wxyz) > -1){ //selectedColumn can be xy, yz etc
    //logic 2
}
//.. so on and so forth

如果其他阶梯,我想使用对象文字符号,而不是这样。

var logicLookup = {
    "???": function(){ //what should be the func name here
        //logic 1
    }
};
logicLookup[selectedColumn]()

我将如何在对象文字中具有函数名称?我相信我不能在物体内部进行indexOf操作。

如果我给该函数一个名称为" ab",那么如果还有其他逻辑,我仍然必须做。

if(selectedColumn.indexOf(const.abc) > -1 || selectedColumn.indexOf(const.abcd) > -1)
{
    logicLookup["ab"]()
}

我想要避免的话。

任何帮助将不胜感激。如果有其他选择,我会很好,如果.. else代码气味陈述。

您只能将该技术用于精确匹配方案。我会以两个步骤进行操作:

1- 归一化输入,从灵活表示到精确的表示:

function normalize(name) {
  var aliasTable = {
    'ab' : ['ab', 'abcd', 'ad'],
    'xyz': ['xyz', 'wxyz']
  }
  for (var normName in aliasTable) {
    for (var i in aliasTable[normName]) {
      if (name === aliasTable[normName][i]) return normName
    }
  }
}

normalize函数的行为如下:

normalize('ab')   -> 'ab'
normalize('abcd') -> 'ab'
normalize('xyz')  -> 'xyz'
normalize('wxyz') -> 'xyz'
normalize(anythingElse) -> undefined

2-调度函数调用:

var normName = normalize('abcd')
var handlers = {
  'ab' : function handleAB() { ... },
  'xyz': function handleXYZ() { ... },
}
if (normName in handlers) {
  handlers[normName]()
}

最新更新