3
すべてのアイテムに対して 1 つのループを実行しようとしているようです。その利点は、必要な反復回数が少ないことですが、 undefined を検索しないようにするためのコードは含まれていません<option>
。次に、1 つのループを使用する利点が実際には反復回数を節約することであり、したがって 2 つのループがあり、最初のループが終了した場所で 2 番目のループをピックアップしても、最小の反復カウントが得られることを検討してください。
したがって、ループの繰り返しを節約したい場合は、次のようなことを試すことができます。ここでは、ループ内のアイテムがどれだけ進んでi
いるか、何が既に見つかっているかに応じて減少します。ただし、これによりコードの重複が発生します。12 < 31 < x ( xは約 と仮定しています) であるため、ループが月、日、年の順に並べ替えられていることに注意してください。コースは存在しません。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>
ます。