在javascript中将if-else从静态更改为动态
我有一个if-else条件,如果我上传一个文件,它将看到文件名中的“code name”,即“abc1”,并将其与硬编码值进行比较,然后将返回值与ProductLine进行比较。这里我正在做一个双向搜索。如何摆脱所有这些if-Else,让它变得简单,就像我上传了一个文件,将它与productLine进行比较,然后返回一样。下面是代码在javascript中将if-else从静态更改为动态,javascript,if-statement,Javascript,If Statement,我有一个if-else条件,如果我上传一个文件,它将看到文件名中的“code name”,即“abc1”,并将其与硬编码值进行比较,然后将返回值与ProductLine进行比较。这里我正在做一个双向搜索。如何摆脱所有这些if-Else,让它变得简单,就像我上传了一个文件,将它与productLine进行比较,然后返回一样。下面是代码 var findProductLineByFilename = function(filename, productLines) { filenam
var findProductLineByFilename = function(filename, productLines) {
filename = filename.replace(/( |\-|\.|_)/g, '');
var i;
for (i in productLines) {
productLine = productLines[i];
// XXX: Hard-code names
if (productLine.code_name === 'abc1') {
if (filename.search(/(war1)|(w1)|(abc1)/) >= 0) {
return productLine;
}
} else if (productLine.code_name == 'abc2') {
if (filename.search(/(w2)|(abc2)/) >= 0) {
return productLine;
}
} else if (productLine.code_name == 'abc3') {
if (filename.search(/(w3)|(abc3)/) >= 0) {
return productLine;
}
} else if (productLine.code_name == 'abc4') {
if (filename.search(/(w4)|(abc4)/) >= 0) {
return productLine;
}
} else if (productLine.code_name == 'abc5') {
if (filename.search(/(w5)|(abc5)/) >= 0) {
return productLine;
}
}
}
return null;
};
使用对象将代码名映射到正则表达式
var findProductLineByFilename = function(filename, productLines) {
filename = filename.replace(/( |\-|\.|_)/g, '');
var map = {
'abc1': /(war1)|(w1)|(abc1)/,
'abc2': //(w2)|(abc2)/,
...
};
var i;
for (var i = 0; i < productLines.length; i++) {
productLine = productLines[i];
if (productLine.code_name in map && map[productLine.code_name].test(filename)) {
return productLine;
}
}
return null;
};
替代方案来自哪里?我们可以看到abcN来自代码名,但是wN部分呢?我在这里尝试的是摆脱硬编码。我的意思是使用对象映射仍然是硬编码。productLine应该直接来自产品列表,我不知道怎么做。如何知道code_name=='acb1'与文件名中的war1、w1和acb1相关,而code_name='acb2'仅与w2和acb2相关。所有的测试似乎没有一个共同的模式。我不确定你说的直接来自产品列表是什么意思。产品清单是什么?