看起来您正在尝试为所有3
项目执行一个循环。这样做的好处是所需的迭代次数较少,但是您没有包含任何代码来确保您不会尝试查找undefined <option>
s。接下来,考虑一下使用一个循环的好处是如何真正节省迭代次数,因此有两个循环,第二个在第一个结束的地方拾取,仍然具有最小的迭代次数。
因此,如果您想节省循环迭代次数,您可以尝试这样的事情,其中循环中的项目会根据距离i
和已经找到的内容而减少。不过,这确实会导致一些代码重复。请注意循环是如何按月、日、年的顺序排序的,因为12 < 31 < x(我假设x是 about ),因此确保您不会尝试查找,例如第20 个月,哪个当然不会存在。400
function verif(ref1, ref2, ref3, ref4, ref5, ref6) {
document.forms["form"].intitule.value = ref1;
document.forms["form"].montant.value = ref2;
document.getElementById(ref3).selected = true;
var i = 0, found = {day: 0, month: 0, year: 0},
elm = {
days: document.getElementById("newDay"),
months: document.getElementById("newMonth"),
years: document.getElementById("newYear")
};
// months length = min(days, months, years)
while (++i < elm.months.length && !found.months) {
if (elm.days.options[i].text == ref4) {
found.days = elm.days.options[i].selected = true;
}
if (elm.months.options[i].text == ref5) {
found.months = elm.months.options[i].selected = true;
}
if (elm.years.options[i].text == ref6) {
found.years = elm.years.options[i].selected = true;
}
}
// days length = min(days, years)
while (++i < elm.days.length && !found.days) {
if (elm.days.options[i].text == ref4) {
found.days = elm.days.options[i].selected = true;
}
if (elm.years.options[i].text == ref6) {
found.years = elm.years.options[i].selected = true;
}
}
// only years left
while (++i < elm.years.length && !found.years) {
if (elm.years.options[i].text == ref6) {
found.years = elm.years.options[i].selected = true;
}
}
}
您可能还注意到我没有包含任何break
语句,这是因为如果我们找到仍将在以后的循环中查找的内容,我们仍然想搜索特定于当前循环的项目,我们不想跳过同一迭代的其他检查,我们也不想在以后的循环上浪费时间。因此,取而代之break
的是一段执行类似操作的代码。<condition>