テーブル行削除と空判定について

いつもお世話になっております。

現在、休暇申請アプリを作成しておりますが、思うように動かないのでご教授お願い致します。

ドロップダウンリスト : フィールドコード「勤怠」(テーブル内にある)

勤怠が空(undefined)の時に、その行を削除したいのですが、空のものが残ったり、選択されているものが消えてしまったりし、意図と違う動きをします。

おそらく空判定が上手く出来ていないのだろうと思い、いろいろ調べて試しましたが、上手くいきません。

(現在エラーは出ていません。)

アドバイスいただけると幸いです。

どうぞよろしくお願いいたします。

 

(function(){

"user strict";

kintone.events.on(['app.record.create.submit','app.record.edit.submit'],function(event){

var record = event.record;

var table = record.table.value;

for(var i = 0 ; i < table.length ; i ++){


if(table[i].value['勤怠']['value'] != ''){

table.splice(i,1);

  }

}
return event;

});

})();

table.spliceで、tableの内容が変わっているからということはないですか?

例えば、i==0の時、table.splice(i,1)が走ると、

次のi==1の時は、元々の2行目をスキップして、3行目を指してませんか?

PV様

コメントありがとうございます。

なるほど!そういうことかと納得しました。

そうならないように考えて書き換えてみます。

上手くいかなかったらまた相談させてください。

よろしくお願いいたします。

if文の{}の中を

table.splice(i,1);

i--;

に変更したのですが、今度はすべての行が消えるようになってしまいました。。。

条件式もおかしいのでしょうか?

2点ありまして、

 

1.すみません、見落としてたのですが、

if(table[i].value[‘勤怠’][‘value’] != ‘’)

だと、値が空じゃないときにif文の中に入ってないでしょうか?

 

2.空行も、空行でもないものも全て削除される場合は、追加した「i–;」が悪さをしている可能性があります。

for文のカウンタで使用する変数「i」を、繰り返し処理内部で変更するのはあまりよろしくない書き方になってしまいます。

(今回のように単純な処理だと良いのですが、途中でループ回数を変えたりするのは著しく可読性が下がり、バグの原因になります。)

 

今回のケースですと、"最終行"から見ていき、先頭行(0)に向かって処理していき、

削除されても、その後見に行く部分には影響がないようにするのが良いかと思われます。

PV様

詳しくアドバイスいただき本当にありがとうございます。

最終行から見ていくという発想が全くなかったので大変勉強になりました!!!

条件式を

if(table[i].value['勤怠']['value'] === undefined)

に変更したところ上手くいきましたが、i–をしなくて良いように最終行から見ていくように書き換えてみます!

この度はありがとうございました。

今後ともどうぞよろしくお願いいたします。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。