コードの難しさと効率の良さのバランスを考えて回答したやつ。
ここでの「難しさ」は、よく分かっていない初学者向けに何をやっているか理解できることを目的とし、「効率の良さ」は仕様や頭の中で「こう動いてほしい」という通りの書き方ではなくアルゴリズムなどを考え実装する事を目的とします。
最初に、回答で書いたコードは60点程度の内容とします。
変数のstepとcountが逆の方が分りやすかったのではないか、そもそも質問の仕様と実装が合っているのか、dataの中身が整列されていない(例えばdata[1]が未定義だった場合)時の処理など色々あります。
初学者向けに使う命令を少なくする事を重視していくと、分岐処理のひとつである switch 使わずに if のみで書くこともできます。
逆に、少ない記述で同様の動作ができるよう、変数を減らしたり分岐中の動作をひとつに纏めたりする事もできます。
今回の質問ではsetTimeoutを利用しているため、読みづらさが増しているものになっています。
JavaScriptは複数の処理を同時に行わないので、setTimeoutで割り込み処理をしてくれるかな?と思い込んでしまうように思える書き方となっていました。
くまやつ。