我在Google表格中有一个学生数据库,其中包含许多迟到的实例。当他们达到5,8或11个迟到时,他们会记录纪律处分。纪律处分在以下三栏中注明了5,8和11个迟到:
| Stu name | # tardies | 5 cons | 8 cons | 11 cons|
|-------------|-----------|---------|----------|--------|
| Joe Doe | 5 | 1/2 ISS | | |
| Mark Dark | 5 | | | |
| Steve Leave | 8 | 1/2 ISS | Full ISS | |
循环采用目标tardies数并比较#tardies列。如果迟到次数的结果列为空白,则会返回stu
数组。
现在,循环运行,但它真的很笨重。我可以采取哪些措施来优化嵌套if
语句的运行方式吗?
for(var i=0;i<data.length;i++) {
var stu = [data[i][0], data[i][1]];
if(target === 5) {
if(data[i][3] === 5 && data[i][4] == 0) {
array.push(stu);
}
} else if(target === 8) {
if(data[i][3] === 8 && data[i][5] == 0) {
array.push(stu);
}
} else if(target === 12) {
if(data[i][3] === 12 && data[i][6] == 0) {
array.push(stu);
}
}
答案 0 :(得分:0)
只是移出你的条件,这只是3个条件? 像这样:
for(var i=0;i<data.length;i++) {
var stu = [data[i][0], data[i][1]];
if(target === 5 && data[i][3] === 5 && data[i][4] == 0) {
array.push(stu);
} else if(target === 8 && data[i][3] === 8 && data[i][5] == 0) {
array.push(stu);
} else if(target === 12 && data[i][3] === 12 && data[i][6] == 0) {
array.push(stu);
}
答案 1 :(得分:0)
var onTarget = {
5: function(data, array){
for(var i=0;i<data.length;i++) {
if(data[i][3] === 5 && data[i][4] == 0){
array.push(stu)
}
}
},
8: function(data, array){
for(var i=0;i<data.length;i++) {
if(data[i][3] === 8 && data[i][5] == 0){
array.push(stu)
}
}
}
}
if(target in onTarget){
onTarget[target](data, array);
}
它有点冗长,而且代码重复,所以你现在可以在索引上玩...
var targetToColumnUplet = {
5: {value:5, blankIndex: 4}
8: {value:8, blankIndex: 5}
}
if(target in targetToColumnUplet){
var uplet = targetToColumnUplet[target];
for(var i=0;i<data.length;i++) {
var stu = [data[i][0], data[i][1]];
if(data[i][3] === uplet.value && data[i][uplet.blankIndex] == 0) {
array.push(stu);
}
}
}
答案 2 :(得分:-1)
你可以尝试这样的事情。
for(var i=0;i<data.length;i++) {
var stu = [data[i][0], data[i][1]];
var d3 = data[i][3];
switch(d3){
case 5:
if(data[i][4] === 0){
array.push(stu);
}
break;
case 8:
if(data[i][5] === 0){
array.push(stu);
}
break;
case 12:
if(data[i][6] === 0){
array.push(stu);
}
break;
}
}