从文本区域获取随机单词的JQuery方法

7

我的问题很简单,但是我不知道如何做到。

我有一个带有一些文本的文本区域,并且我想从文本中获取 5 个随机单词并将它们放入另一个输入字段(自动)。 我不想要特定的单词,只是随机的五个单词。就是这样。谢谢!

例如:

“Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore 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 officia deserunt mollit anim id est laborum。”

当写入此文本时包含它的输入字段,例如:ipsum,amet,veniam,velit,deserunt。


这很简单 -> FIDDLE - adeneo
好的,在http://jsfiddle.net/cwrxV/中它可以工作,但是当我尝试将其放入我的网站时它就无法工作了!问题出在哪里,请帮助我找出原因。感谢之前的帖子。我的HTML代码与我在jsfiddle中粘贴的代码相同,并且我从<head>、<body>和外部JS文件中加载jquery代码。结果还是一样... :/ - Stoyan Zdravkov
3个回答

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);
}

你应该使用indexOf方法检查数组中是否已经包含了该字符串。 - Dávid Szabó
代码已更改以防止重复。 - WebStakker
在输出 div 中使用 text 替代 val。 - Gurpreet Singh

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中的工作示例


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接