来自文本文件的Javascript Shuffle数组

时间:2016-03-03 02:36:12

标签: javascript arrays random text-files

我希望从文本文件中拉出5个“随机”行而不重复任何行。文本文件中的每一行都有html代码,可以插入到侧边菜单中。我已经读过Fisher-Yates shuffle,但不知道如何用javascript以这种方式将它合并。目前我正在使用以下编码从文件中提取单个1行:

var request = new XMLHttpRequest();
request.onload = function() {
    // get the file contents
    var fileContent = this.responseText;
    // split into lines
    var fileContentLines = fileContent.split( '\n' );
    // get a random index (line number)
    var randomLineIndex = Math.floor( Math.random() * fileContentLines.length );
    // extract the value
    var randomLine = fileContentLines[ randomLineIndex ];

    // add the random line in a div
    document.getElementById( 'random-testimonial' ).innerHTML = randomLine;
};
request.open( 'GET', 'content.txt', true );
request.send();

感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您需要在request.onload()重复五次代码,不是吗? (除了附加到div html而不是设置它。)只需使用循环。您不需要实现随机播放:您正在使用的随机(0..N-1)整数表达式是您选择随机行所需的全部内容。

虽然你可能想要防止重复。也许在追加之前检查子串匹配。

var request = new XMLHttpRequest();
request.onload = function() {
    var i = 0;
    // get the file contents
    var fileContent = this.responseText;
    // split into lines
    var fileContentLines = fileContent.split( '\n' );

    var target = document.getElementById( 'random-testimonial' );
    var targetHTML = target.innerHTML;

    while ( i < 5 ) {
        // get a random index (line number)
        var randomLineIndex = Math.floor( Math.random() * fileContentLines.length );
        // extract the value
        var randomLine = fileContentLines[ randomLineIndex ];

        // add the random line in a div if not duplicate            
        if ( ! targetHTML.contains(randomLine) ) {
            targetHTML += randomLine;
            i += 1;
        }
    }

    target.innerHTML = targetHTML;
};
request.open( 'GET', 'content.txt', true );
request.send();

答案 1 :(得分:0)

  你可以试试这个。在1和n之间生成5个随机数(其中   n = fileContentLines.length)说n1,n2,n3,n4和n5。然后你得到   您的5行为fileContentLines[n1],依此类推......使用此代码   片段生成5个随机数:

`var arr = []
while(arr.length < 5){
  var randomnumber=Math.ceil(Math.random()*n)
  var found=false;
  for(var i=0;i<arr.length;i++){
    if(arr[i]==randomnumber){found=true;break}
  }
  if(!found)arr[arr.length]=randomnumber;
}`