7

私の質問は非常に単純ですが、それを行う方法がわかりません。

テキストを含むテキストエリアがあり、テキストから5つのランダムな単語を取得して、別の入力フィールドに入れたい(自動)。私は特定の言葉になりたくない。ランダムに5単語。それでおしまい。ありがとう!

例:

「Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut laboure et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate. velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui office deserunt mollit anim id est labourum."

このテキストが書かれたときに含まれる入力フィールドは、たとえば、ipsum、amet、veniam、velit、deserunt です。

4

3 に答える 3

4

これは、ワークフローに関する私の提案です。

  1. テキストエリアから単語を取得します
  2. 重複を削除する
  3. 配列を繰り返して単語を取得し、配列から削除します(重複を避けます)

サンプルコード:

var text = "Lorem ipsum ......";
var words = $.unique(text.match(/\w+/mg));
var random = [];

for(var i=0; i<5; i++) {
    var rn = Math.floor(Math.random() * words.length);
    random.push( words[rn]);
    words.splice(rn, 1);
}

alert( random ):

jsFiddleでの作業例

于 2012-12-15T14:50:50.153 に答える
4

これはうまくいくはずです:

var content = $("#myTextarea").val(),
    words = content.split(" ");

var randWords = [],
    lt = words.length;

for (var i = 0; i < 5; i++)
    randWords.push(words[Math.floor(Math.random() * lt)]);

$("#otherField").val(randWords.join(" "));

編集:重複を防ぐために、次を使用できます。

var nextWord;
for (var i = 0; i < 5; i++)
{
    nextWord = words[Math.floor(Math.random() * lt)];
    if (("|" + randWords.join("|") + "|").indexOf("|" + nextWord  + "|") != -1)
    {
        i--;
        continue;
    }
    randWords.push(nextWord);
}
于 2012-12-15T14:36:30.867 に答える
1

さらに短い:

var str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.';

function rWords( t ) {
    for ( var i = 5, s = t.match( /(\d|\w|')+/g ), r = [] ; i-- ; r.push( s[ Math.random() * s.length | 0 ] ) );
    return r.join( ', ' ).toLowerCase();
}

console.log( rWords( str ) );
> lorem, eiusmod, elit, dolor, do
于 2012-12-15T15:15:41.813 に答える