ホーム > HTMLに役立つヒント
> JAVAスクリプトコレクション > 配列から重複しないようにランダムに取り出す
配列から重複しないようにランダムに取り出す
配列を用意して、その中から重複がないようにランダムに要素を取り出しなさいと。perlなら簡単にできるが、JAVAscriptでは思わぬ伏兵がいた。
重複を避けるのは実は簡単だ。配列の中からランダムに要素を取り出したら、今取り出した要素を元の配列から削除してしまえばいい。「111,222,333,444」という配列があって、「222」を取り出したら「111,333,444」という配列に作り変えて、次はこの配列を元にしてランダムに要素を取り出すのである。こうすれば重複はない。
配列の中から任意の要素を削除して、一つ短い配列に作り直すには、spliceという命令を使うのが簡単である。perlな人なのですぐにそれを考えた。JAVAscriptにも同じ命令があるじゃん、楽勝と思ったら、この命令、IE5.5以降でないとサポートしていないことが判明。Macintosh版のIEはOS 9が5.1x、OS X版が5.2xで最終なので、この命令が使えないのだ。
それだけでなく、pop、pushといった配列をいじる命令が軒並み5.5以降(;_;)
で、しかたないので以下のような面倒なことをして一つ要素の少ない配列に作り直している。
|
<script language="javascript" type="text/javascript"> for(i=0;i<kaisuu;i++){ document.write(i + "元の配列" + flashName + "<br>");
//■動作がわかりやすいように元配列を表示 //--> |
いったん文字列に変換して、文字列として置換してから配列に戻すという手間ヒマをかけている。同様の手法でpopもpushも実現可能である。
しかし、この方法では、最初に用意した配列が、例えば「1,2,3,........11,12,13,14」というようなものであると、「2」が選ばれた際に「2」「12」「20,21,22,23....」の「2」部分も削除対象になって誤動作を起こす。そういう場合は「001,002,003......」のように、必ずユニークな内容の配列にする必要がある。
ホーム > HTMLに役立つヒント
> JAVAスクリプトコレクション > 配列から重複しないようにランダムに取り出す