我在现有项目中有以下代码。
//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"]()
}
我希望避免这种情况。
任何帮助,将不胜感激。如果此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 - Javascript:对象文字符号中的indexOf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41122639/