テキストエリアからランダムに3行取り出す(重複なし)


動作ブラウザ 【 IE:4.0   NN:6.0
Internet Explorer Netscape Navigator Firefox Opera iCab Safari
3.0x 4.0x 4.5 5.0x 5.5 6.0 2.0x 3.0x 4.0x 4.x 6.0 7.0 8.0 1.0 7.x 8.x 2.x 1.x 2.x
Windows × - × × × -
Macintosh × × × × - × × - × × ×
UNIX - - - - - × × × × × × - × × × -

ポイント if (navigator.userAgent.indexOf("Mac") > -1) result = txt.split("\n"); if (navigator.userAgent.indexOf("Win") > -1) result = txt.split("\r\n"); n = Math.floor(Math.random() * (result.length - (getLine - 1))); aText = result.splice(n,1); resultText = resultText + aText + String.fromCharCode(13);
説  明 テキストエリアからランダムに3行取り出すにはsplit()を使って改行コードで文字列を分割します。あとは乱数を発生させ、乱数値を配列の添字として指定し文字列を読み出していきます。このとき重複しないようにするにはsplice()を使って指定した配列要素を抽出します。splice()は取り出した配列要素を元の配列から取り除くため重複することがなくなります。
サンプル <html> <head> <title>テキストエリアからランダムに3行取り出す(重複なし)</title> <script type="text/javascript"><!-- function getTAline() { result = null; resultText = ""; getLine = 3; // 3行抽出 txt = document.myFORM.myTEXT.value; if (navigator.userAgent.indexOf("Mac") > -1) result = txt.split("\n"); if (navigator.userAgent.indexOf("Win") > -1) result = txt.split("\r\n"); if (result && (result.length > getLine)) { for (cnt=0; cnt<getLine; cnt++) { n = Math.floor(Math.random() * (result.length - (getLine - 1))); aText = result.splice(n,1); resultText = resultText + aText + String.fromCharCode(13); } }else{ resultText = txt; } document.myFORM.resultTEXT.value = resultText; } // --></script> </head> <body> <form name="myFORM"> 元のテキスト<br><textarea rows="6" name="myTEXT"></textarea><br> <input type="button" value="ランダムに3行取得" onClick="getTAline()"><br> 3行抽出結果<br><textarea rows="6" name="resultTEXT"></textarea><br> </form> </body> </html>
補足説明 ブラウザによって取り扱う改行コードが異なるので注意が必要です。つまり改行コードはOSとブラウザに依存します。このため、このサンプルでもMac版のFirefoxでは動作してもWindows版のFirefoxでは正しく動作しません。

■サンプルスクリプトを実行する >>実行
■各ブラウザでの動作結果を見る >>View!

写真素材 PIXTA