要素をランダムで取得する方法と、undefined の対応

カテゴリ: JavaScript, jQuery

記事投稿日: 2013年3月25日



jQueryを使っています。
altに番号が振ってある複数の画像の中から
ランダムで1つだけ抜き出す、というよくあるパターン。

画像の数は

var length = $(".picture img").length;

これで取得

ランダムで抜き出すのは以下で取得(サイコロを振っている)

var ran = Math.floor(Math.random()*length) + 1;

けれど何かの手違いでaltに番号が振られていない場合

var search_no = $("img").eq( parseInt(ran) ).attr("alt");

search_no には、undefinedが入ります。
この時の判定をよく使うようになったので、メモしておきます

// search_noが見つからなければ、サイコロを振りなおし続ける
while(typeof search_no === "undefined"){  
    ran = Math.floor(Math.random()*length) + 1;
    search_no = $("img").eq( parseInt(ran) ).attr("alt");
}

運営上、全体でまったく見つからないということはありえないのですが、
10回トライして、それでも見つからなければ、途中で処理を中断、
という処理を作った方がいいですね。
解説を書いていて、プログラミング的には無限ループの処理に
なっていることに気がつきました。

while( (typeof search_no === "undefined") || (i++ < 10) ){

これでいいようです。
間違いがあれば、どなたか教えてください。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA




トップに戻る