重複のアルゴリズム(配列)
前回は、相互チェック(重複エラーチェック)を2重ループで実装した。しかし、ループを1回で実装することもできる。
前回の内容は下記参照。
画面イメージ
一覧形式の入力項目にエラーチェックを実装しようとする。
製品入庫登録 | ||||||||||||||||||
|
仕様
①登録ボタンを押下後、製品番号が重複している場合、エラーを表示する。
エラーを画面上部に表示する場合
重複データを単純に知らせたい場合、画面の上部もしくはJavaScriptのalertでポップアップエラーを表示することがある。
製品入庫登録 | ||||||||||||||||||
|
ソース
ボタンを押した時に呼び出される関数は、下記に記載。
- function buttonfunction1() {
- var ary = new Array(5);
- ary[0]=document.getElementById('seiban1_1').value;
- ary[1]=document.getElementById('seiban1_2').value;
- ary[2]=document.getElementById('seiban1_3').value;
- ary[3]=document.getElementById('seiban1_4').value;
- ary[4]=document.getElementById('seiban1_5').value;
- var count = 0;
- var errorFlg = false;
- for (i = 0; i < 5; i++) {
- if (ary[i] == "") {
- count++;
- continue;
- }
- if (ary.indexOf(ary[i]) < i){
- errorFlg = true;
- }
- }
- if (count == 5) {
- document.getElementById('msg1').innerHTML = "<font color='red'>登録データがありません。</font>";
- return;
- }
- if (errorFlg) {
- document.getElementById('msg1').innerHTML = "<font color='red'>製品番号が重複しています。</font>";
- } else {
- document.getElementById('msg1').innerHTML = "登録しました。";
- }
- }
解説
大きな処理は3つ。
配列・変数の定義、重複判定処理、メッセージ・エラー表示。
前回との変更点としては、重複判定はFor文のみで実装している。
- 2~7行目 入力項目を配列にセット。
- 9行目 全てが空行か判定する変数(※1)
- 10行目 重複行があるか判定する変数(※2)
- 11行目 For文 全行判定します。
- 12~15行目 空行の場合、次の行に移る。空行判定変数(※1)にインクリメント。
- 16~18行目 現在行の値が配列の何番目か取得、現在行より小さい場合は重複エラー変数(※2)をtrue。
- 21~24行目 空行判定変数(※1)が全行の場合、エラーを表示。処理終了。
- 27行目 重複エラー変数(※2)がtrueの場合、エラーを表示。
- 29行目 そうでない場合、登録成功。
計算量の確認
上記のソースは、前回と比べると、試行回数がnとなっており、行数によって累次的に計算量が増加はしない。
結論
重複のエラーが存在するかだけを判定する場合は、For文1回だけで判定することができる。