for 〜 next ループ (Re: TEXTAREA と 外部jsファイル
ナカジマです。
板橋さんこんばんは。
for(i=2;((i<5)||(i>=7&&i<10));i++){
// 処理
alert(i);
}
を実行した時、何が起きたかを考えれば、理解しやすいと思うのですが。
for ( 初期値; 条件式; 増減式 ) { 処理 }
は、条件式が成立している間、処理を行い、増減式に従ってカウンタ(iなど)を増減しま
す。つまり、上のソースを実行させると、
i=2 これは、条件 ((i<5)||(i>=7&&i<10)) が真なので、処理を行い、i を1増します。
i=3 同じく、条件は真。処理を行い、i を1増します。
i=4 同じく、条件は真。処理を行い、i を1増します。
i=5 ここで、条件は偽となるので、処理は行われず、ループを終了します。
つまり、条件式のORより後半((i>=7&&i<10))は、関係なくなりますね。
条件式のところを替えるのではなく、増減式を工夫して、
for(i=2;i<10;(i=i+1+(i==4)*2)){
alert(i);
}
とする方法はありますが、これはいかにもトリッキーです。
(ie6.0/win98 では動きましたが、真=1 と扱うかどうかは、
保証されていないと思うので、上のソースは止めといた方が
いいんではないかと思います。<この辺りの事情は詳しく
ありません。m(__)m)
板橋さんのやりたいことを素直に行うなら、
for(i=2;i<10;i++){
if ((i<5)||(i>=7&&i<10)) {
// 処理
};
}
とするのが普通だと思います。カウンタ変数 i は、1ずつ増えますが、条件を満たさな
い時は、処理が行われないように書いてあります。
From: "ITAHASHI Kunio" <kunitahashi@h2.dion.ne.jp>
Message-ID: <j4bFb.117$dl4.23@news1.dion.ne.jp>
> for文といえば、私的にずーっと未解決なことがあるのですが、ちょ
> っとご助言いただけますでしょうか。できれば、今の問題に取り入
> れられたら、いいのですが・・・。
> 配列データの中の任意の要素を切り出すという問題です。
> たとえば、
>
> var x = new Array(
> '0',
> '1',
> '2',
> '3',
> '4',
> '5',
> '6',
> '7',
> '8',
> '9'
> );
>
> という配列データが与えられていて、いま、この中の任意の要素、
> '2', '3', '4, '7', '8', '9' という6つの文字列を切り出して表示するとい
> うコードを書く、というとき、for文を2つ使って文字列を連結させる
> という考え方でのコードは書けるのですが、*1つのfor文*で書き
> 出すことはできますでしょうか。
>
> for(i=2,i<5;i++) || (i=7;i<10;i++)){
> document.write(i+'<br>')
> }
>
> または、
>
> for(i=2;((i<5)||(i>=7&&i<10));i++){
> .................
> }
>
> もしくは、
>
> for(i=2?;i<5:i=7?;i<10:null;i++){
> ..................
> }
>
> というような具合で。
> それが出来れば1つの配列を経済的に使えるのですが。
> ご教示お願いいたします。
>
>
> --
> 板橋
>
>
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735