ぼんやりDTP

DTPに関係したりしなかったりするぼんやりとした話をなんとなく。

InDesign の JavaScript で配列に値が含まれているかどうか調べる

InDesignJavaScript で配列に値が含まれているかどうか調べるのに、今までは「http://text.readalittle.net/article.php?id=135」(現在は存在しない)に記載されていた Array.contains を実装したコードを使用してきたが他に一般的な方法は無いものかググった。

最近のJavaScript(ECMAScript)だと Array​​.includes が使えるようだが、InDesignJavaScriptのような古い環境だと使えない。

↑を参考に、ポリフィルを使ってみようかと思ったが、Object.defineProperty をサポートしない環境では「non-enumerable化することができない」から使わないほうがいいとのこと。無理して古い環境で使うものではないようだ。

「non-enumerable化」ってどういうことかわからないが、列挙不可能化?とでも訳せばいいのか?

プロパティーの列挙で「for...in ループの対象」に含めないようにする処理のことかな。

Array​​.indexOf を使用した方法もあるようだが、 Array​​.indexOfInDesignJavaScript では使えない。

↑に掲載されているポリフィルには古い環境で使えない注記もなく、実際に使用した限りでは動作したので、これを使用してもいいかもしれない。

その他参考ページ:

  1. プロパティの列挙可能性と所有権 - JavaScript | MDN
  2. JavaScript の Array.some と Array.includes の使い分け、値・参照型の動作の違い - Qiita
  3. JavaScriptで配列に値が存在するか検索する:indexOf() | UX MILK