Google Apps Script(以降、GAS)でスクリプトを実行していたら、さっきまで動いていたのに急にエラーで落ちるようになってしまいました。 今回の記事はそのことについて書きます。
エラー内容
エラーの内容は、エラー内容比較方法が全般的な契約に違反しています。でした。 調べてみると、GASはJavaScriptライクなはずなのに、Java系のエラーばかり見つかって、うーんGASってJavaでできているのかなーとか思いはしました。
エラーが発生するソースコード例
以下のように、dataという配列の中の各要素に対してcountという項目の大きさでソートしようと思っていました。
data.sort(function(a,b) { return a.count < b.count ? 1 : -1 })
これでいけるっしょとは思っていたんですが、この書き方だとエラーになりました。
原因
どうやら、大きいか、小さいか、同じかをそれぞれ 1
, -1
, 0
で表現しないといけないらしい。
今回は、大きかったら 1
、それ以外だったら -1
としていたため、おそらくですが、同じ数値の場合の比較が並び替えると不整合が起きてエラーが発生したんじゃないかなと思います。
修正後のソースコード例
なので、このように、しっかりと 1
, -1
, 0
で表現しました。
data.sort(function(a,b) { return a.count < b.count ? 1 : a.count > b.count ? -1 : 0 })
これで無事直りました。
さいごに
ということで、sortメソッドで自分で比較する条件を書く場合は、しっかりと0も含めた書き方をしないといけないということをこれから気をつけたいと思います。