【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
スポンサーリンク