尝试优化模式匹配代码。旧代码中很少有与来自回调数据的ID相匹配的模式。
var Id = callbackData.Id
var pattern1 = /gen/g;
var pattern2 = /0--google/g;
var pattern3 = /mail/g;
var isPattern1 = pattern1.test(Id)
var isPattern2 = pattern2.test(Id)
var isPattern3 = pattern3.test(Id)
if(Id && Id !== 0 && !isPattern1 && !isPattern2 && !isPattern3)
{
//return statement
// function
} else {
//return statement
//function
}
为了优化它,我创建了一个包含模式的json文件。正在从json文件读取模式并与ID匹配。
Json file : test.json
{
"PatternToSearch": {
"pattern1" : "gen",
"pattern2" : "^0--google",
"pattern3" : "mail"
}
}
var patternToMatch = require('test.json');
var patternArray = [];
Object.keys(patternToMatch.PatternToSearch).forEach(function (key) {
var value = PatternToMatch.PatternToSearch[key];
patternArray.push(value);
});
return Promise.all(patternArray);
.then(patternArrayResult => {
for (var val in patternArrayResult) {
var pattern = patternArrayResult[val];
var patternToCompare = new RegExp(pattern);
var isPattern = patternToCompare.test(Id);
}
})
我也尝试过forEach
,但是我从函数返回布尔值,而forEach
没有返回任何值,所以我在...
无法复制此条件Id && Id !== 0 && !isPattern1 && !isPattern2 && !isPattern3
。怎么做?
尝试
if(isPattern){
if(Id && Id !==0 && isPattern) {
// return statement
}
}
,但是当所有模式都与ID不匹配时,此条件将不起作用。因为我在for循环里面只有一次
条件为true,其他时间为false,这会使控制器进入else循环
如何复制条件? (Id && Id !== 0 && !isPattern1 && !isPattern2 && !isPattern3)
答案 0 :(得分:0)
这是some
的工作,如果数组中的任何项导致给定函数返回真实值,则返回true
:
return patternArray.some(v=>RegExp(v).test(Id));
并在测试中也包含Id
的值:
return Id && patternArray.some(v=>RegExp(v).test(Id));
您不需要单独测试Id !== 0
,因为零值将被视为虚假值,从而导致&&
尽早短路。 (因此,Id && Id !== 0
只会产生0
或true
:当该条件为假时,执行流永远无法达到条件Id !== 0
,因为测试{{1} }设为零值将早早终止Id
流。)