一回も披露したことのない豆知識

let num = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ];

let bool = true;

function selectNum( isRotate )
{
while ( bool )
{
for ( let i = 0; i < num.length; i++ )
{
console.log( num[i] );
}

}
bool = isRotate;
}

setTimeout( selectNum, 1000, false );

一定時間ループさせて止めたいのですが、
これだと 1 秒後待ったのちの処理になり、処理も継続のまま止まらず。

実際の動作の希望は、
1 秒後ではなく、 1 秒ループさせ num の配列の 1 つを表示したいのですが、
その方法がわかりません。

わかる方おりましたら、教えてください。

よろしくお願いいたします。

A 回答 (2件)

こんばんは



>1 秒ループさせ num の配列の 1 つを表示したい
目的は何なのでしょうか?

もしも、配列の中からランダムに選択したいのなら、普通は、
 console.log( num[Math.random() * num.length | 0] );
みたいな方法にすると思います。

1秒後に実行したいのであれば(実際にはいつ計算しても同じことですけれど)、setTimeoutで1秒後に上記を実行させるとか。


どうしても言葉通りに『1秒間ループさせたい』のであれば、時間を測りながら1秒を過ぎたらループを止めるようにしておくとかでしょうか。
 let i = 0, d = new Date();
 while( new Date() - d < 1000 ) ++i ;
 console.log( num[i % num.length] );
こちら場合は、処理速度と関連のある記述になっているので、結果には多少の偏りが出るかも知れません。
ちなみに、私のマシンだと、上記で 約360万回/秒 程度ループしているようです。
(ランダムに選択するのが目的だとするなら、無駄な処理を繰り返していると言わざるを得ません)
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

参考に致します。

お礼日時:2021/08/23 01:07

1秒間ループさせるととんでもない量の処理になりますが


それを受けられるだけの環境ですか?
処理自体はworkerなどで対応可能だと思います
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

参考に致します。

お礼日時:2021/08/23 13:57

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