Javascript:对象文字表示法中的indexOf

标签 javascript object-literal

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

//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

我想使用对象文字表示法而不是这个 if else 梯子。

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

logicLookup[selectedColumn]()

如何在对象文字中包含函数名称?我相信我无法在对象文字内部执行 indexOf 操作。

如果我给该函数命名为“ab”,那么我仍然需要再次执行 if else 来拉取逻辑。

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

我希望避免这种情况。

如有任何帮助,我们将不胜感激。如果有任何替代方案可以替代 if..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]()
}

关于Javascript:对象文字表示法中的indexOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122639/

相关文章:

javascript - 将对象文字符号转换为数组

javascript - 在 javascript 中指定对象文字内属性的不同方法

javascript - Laravel mix/webpack 不会触发通过 babel() 编译的脚本的监视功能

javascript - 什么是解构赋值及其用途?

javascript - Google Scripts - SMS 短信脚本的延迟循环

javascript - 更改列表框所选项目时更改图像

javascript - 如何将原型(prototype)和非原型(prototype)对象文字与构造函数一起使用?

javascript - 如何在 JavaScript 中返回对象字面量

arrays - react .js : How to properly append multiple items to an array state using its use-state hook setter?

javascript - 在 jQuery 中创建多个相同的元素