アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。
以下のように配列を定義して、
(1)のforループを抜ける条件をj<=5などのように指示しなくても
できるようにならないかと苦慮しています。

(1)で、
j<=5 が5以下なら動作します。
ところが、6以上となると、配列Menuが定義されていないため
停止してしまいます。
そこで、breakを用いてforループをぬけようとしたのですが何も表示されなくなってしまいます。(5)も実行されません。
(2)(3)(4)と試したのですが、ダメでした。
配列の数をj<=5のように指示しなくても、また、あらかじめ配列の数を変数で定義しなくても、定義した配列だけ表示する方法はないものでしょうか。
よろしくお願いいたします。

Menu1=new Array("aaaaaaaa","");
Menu2=new Array("bbbbbbb","");
Menu3=new Array("cccccccc","");
Menu4=new Array("ddddd","");
Menu5=new Array("eeeeeeeeeee","");
function tstEval(){
document.write('<div id="tstArea">tstArea</div>');
MenuArea=document.getElementById('tstArea');
strHtml="";
for(j=1;j<=5;++j){//(1)
MenuAray=eval('Menu'+j);
// if(MenuAray==empty){//(2)
// if(MenuAray==undefined){//(3)
if(MenuAray==''){//(4)
alert('The End');//(5)
break;
}
strHtml+=j+MenuAray[0]+'<br>';
}
alert(strHtml);
MenuArea.innerHTML = strHtml;
}

A 回答 (2件)

No.1です。



前回の回答でMenuArayがMenuArrayになっていようなので、それが原因だと思います。
MenuArrayをMenuArayに直して下さい。
    • good
    • 0
この回答へのお礼

Bonjinさん、レスありがとうございます。
できました。
自分で気がつかなくて申し訳ありません。
どうもありがとうございました。

お礼日時:2007/10/07 18:06

evalは戻り値がないので戻り値を利用するのは無理ですね。



> MenuAray=eval('Menu'+j);

> eval('MenuArray=Menu' + j);
にしてみて下さい。

でもMenu6が定義されていないならエラーが起きるのでtryを使って下さい。for文のところを書き直すとこんな感じです。
j = 1;
while(true){
try{
eval('MenuArray=Menu' + j);
strHtml += j + MenuAray[0] + '<br>';
j++;
}catch(e){
alert('The End');
break;
}
}
    • good
    • 0
この回答へのお礼

Bonjinさん、早速レスありがとうございます。
早速試してみました。
>alert('The End');
は、実行されるようになりましたが、
>alert(strHtml);
で、strHtmlに、何も表示されません。
だから、ブラウザ画面で、最初表示されていた「tstArea」が表示されなくなる。
と、いう状態となりました。
catch(e)の意味が良くわからないので調べていますが。
まずは、お礼まで。

お礼日時:2007/10/07 11:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!