- ベストアンサー
JavaScript配列内の条件抽出方法
- JavaScript配列内の条件抽出方法について教えてください。
- 配列内にある特定の条件をチェックして、結果に応じて表示する方法について教えてください。
- 配列の要素を順番に表示し、最後まで表示したら先頭に戻る方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>最初に2秒まってから「2番目」が表示されるようです ああ、そりゃそうですね。失礼しました。 関数化して最初に呼び出してからあとは繰り返し処理をすればいいです。 <script> var counter=0; mozi = new Array(); mozi[0]= new Array("off","1番目"); mozi[1]= new Array("on","2番目"); mozi[2]= new Array("on","3番目"); mozi[3]= new Array("on","4番目"); mozi2=new Array(); for(var i in mozi){ if(mozi[i][0]=="on") mozi2.push(mozi[i][1]); } function doCount(){ document.getElementById("hoge").innerHTML=mozi2[counter]; counter=(counter<mozi2.length -1)?counter+1:0; } window.onload=function(){ doCount(); setInterval(function(){doCount()},2000); } </script> <div id="hoge"></div>
その他の回答 (2)
- hitomura
- ベストアンサー率48% (325/664)
……なんかフォームの操作によってmojiの内容が変わりそうに見えるな…… もしその場合、#1様の方法では対応できなくなります。 以下のようにしてください。 (無論、ページを開いた時点でmojiの内容が決まっているならば#1様の方法のほうがコードが短く簡易です) <script> var counter=0; mozi = new Array(); mozi[0]= new Array("off","1番目"); mozi[1]= new Array("on","2番目"); mozi[2]= new Array("on","3番目"); mozi[3]= new Array("on","4番目"); // 現在のカウンターの次にonになっている番号を探す // 見つからない(全部offになっている)場合は現在のカウンターの値を返す function next() { var i; for (i = counter + 1; i < mozi.length; i++){ if (moji[i][0] == "on") return i; } for (i = 0; i < counter; i++){ if (moji[i][0] == "on") return i; } return counter; } window.onload=function(){ setInterval(function(){document.getElementById("hoge").innerHTML=mozi[counter][1];counter=next()},3000); } </script> <div id="hoge"></div>
お礼
回答ありがとうございます。 実際に動作を確認したところ、 3秒wait→1番目→2番目→3番目→4番目→2番目...となり、 最初に「1番目」が表示されてしまうようです。
- yambejp
- ベストアンサー率51% (3827/7415)
予め条件に併せて抽出しておき、あとはグローバル変数をカウンタにすればよいでしょう <script> var counter=0; mozi = new Array(); mozi[0]= new Array("off","1番目"); mozi[1]= new Array("on","2番目"); mozi[2]= new Array("on","3番目"); mozi[3]= new Array("on","4番目"); mozi2=new Array(); for(var i in mozi){ if(mozi[i][0]=="on") mozi2.push(mozi[i][1]); } window.onload=function(){ setInterval(function(){document.getElementById("hoge").innerHTML=mozi2[counter];counter=(counter<mozi2.length -1)?counter+1:0},2000); } </script> <div id="hoge"></div>
お礼
早速回答いただきありがとうございます。 大変勉強になります。実際に動作を確認しましたが、 ほぼ希望通りの動きができました。 ただ、ブラウザでロードすると、最初に2秒まってから「2番目」が表示されるようです。これを遅延なしで表示するのは難しいでしょうか。 よろしければご教示ください。
お礼
回答ありがとうございました。 希望の動作が実現できました。大変助かりました。 こちらをベストアンサーとさせていただきます。