非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【GAS】日付の配列データの検索はindexOfではなくfindIndexを使う

   

配列データの中に日付が入っていて、その日付を検索する場合は少しテクニックが必要になります。もちろんforループで1つ1つ取り出せば検索は可能ですが数値や文字列のようにindexOfメソッドを使ってスマートにやりたいところです。…が、日付はオブへジェクトなのでオブジェクト同士は=で比較できません。

例えば以下の例です。配列内の「2023/06/11」をindexOfで検索しようにも引っかかりません。-1が返ってきます。

let dt = [];
dt.push(new Date('2023/06/08'));
dt.push(new Date('2023/06/09'));
dt.push(new Date('2023/06/10'));
dt.push(new Date('2023/06/11'));
dt.push(new Date('2023/06/12'));
dt.push(new Date('2023/06/13'));

let today = new Date('2023/06/11');
let index = dt.indexOf(today);
console.log(index);
//-1
 

 

 

どうやるかというと、findIndexメソッドを使って要素を取り出しgetTime()メソッドで元期からの経過ミリ秒数(数値)同士を比較することで検知可能になります。

let index2 = dt.findIndex(element => element.getTime()==today.getTime());
console.log(index2);
//3
 

 

スポンサーリンク

 - Google Apps Script