javascript代码优化问题
前提:有如下的匹配表,配上下面的代码,麻烦大神帮忙改下算法,运行速度快点Role1Role2Colora1b2Greena2b3Yellow.........a10002...
前提: 有如下的匹配表,配上下面的代码,麻烦大神帮忙改下算法,运行速度快点
Role1 Role2 Color
a1 b2 Green
a2 b3 Yellow
... ... ...
a100023 b30001 Red
function complianceCheck()
{
var multiline=fld_input.getValue();
var c1, c2, result,Wrongcount=0,Worningcount=0;
var len = role1.length;
if(len > 0) {
for(i=0; i<len; i++) {
c1 = role1[i];
c2 = role2[i];
result = Color[i];
c1Match = multiline.indexOf(c1);
c2Match = multiline.indexOf(c2);
if(c1Match > -1 && c2Match > -1) {
if(result == "Red") {
Wrongcount++;
fld_result.setValue("Orange");
break;
}
else {
warningCount++;
}
}
}
if(wrongCount == 0) {
if(warningCount > 0) {
fld_result.setValue("Orange");
} else {
fld_result.setValue("Green");
}
}
} else {
application.notify("No data in match table.");
fld_result.setValue("");
}
} 展开
Role1 Role2 Color
a1 b2 Green
a2 b3 Yellow
... ... ...
a100023 b30001 Red
function complianceCheck()
{
var multiline=fld_input.getValue();
var c1, c2, result,Wrongcount=0,Worningcount=0;
var len = role1.length;
if(len > 0) {
for(i=0; i<len; i++) {
c1 = role1[i];
c2 = role2[i];
result = Color[i];
c1Match = multiline.indexOf(c1);
c2Match = multiline.indexOf(c2);
if(c1Match > -1 && c2Match > -1) {
if(result == "Red") {
Wrongcount++;
fld_result.setValue("Orange");
break;
}
else {
warningCount++;
}
}
}
if(wrongCount == 0) {
if(warningCount > 0) {
fld_result.setValue("Orange");
} else {
fld_result.setValue("Green");
}
}
} else {
application.notify("No data in match table.");
fld_result.setValue("");
}
} 展开
2个回答
展开全部
优化几点:
1 找到任意一个使warningCount或Wrongcount变化的均需要中断循环,也就是原本的warningCount++;处也应该break;减少无谓的循环浪费
2 result变量是临时变量,且只有赋值没有使用,删除掉
3 warningCount和Wrongcount的目的只是标记需不需要变更橙色,不需要具体的数值,也不需要返回数值,功能一致,合并成一个变量,命名为isOrange布尔型
4 c1Match和c2Match的赋值合并入条件判定语句中,利用&&的惰性判定减少一部分的赋值运算
修改后的代码:
function complianceCheck()
{
var multiline=fld_input.getValue();
var c1, c2, isOrange=false;
var len = role1.length;
if(len > 0) {
for(i=0; i<len; i++) {
c1 = role1[i];
c2 = role2[i];
if(multiline.indexOf(c1) > -1 && multiline.indexOf(c2) > -1) {
isOrange = true;
break;
}
}
fld_result.setValue(isOrange ? "Orange": "Green");
} else {
application.notify("No data in match table.");
fld_result.setValue("");
}
}
不一定是最优的.进一步优化的话请根据业务特性从数据方面着手.
追问
谢谢回复。。
不好意思啊,我代码写错了一点,有三种颜色,red, orange和green.
另外想问下,我的R1,R2大约有1万多行,无序排列,如何优化这个查找的算法呢?
追答
完全无需的话单独从程序代码方面优化空间不大了.如果这一万多条数据是固定的,建议存储对这些数据排序后的信息作为程序的数据源,如果这一万多条是从别的地方传过来的(切无法控制),优化的空间不大. 这个函数如果要很多次调用的话,内存中可以存放经过排序的(排序的时间会很长).
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询