簡體   English   中英

文本文件中的Javascript Shuffle數組

[英]Javascript Shuffle Array from Text File

我希望從文本文件中提取5條“隨機”行,而不重復任何行。 文本文件中的每一行都有html代碼,這些代碼將插入到側面菜單中。 我已經閱讀了Fisher-Yates隨機播放的內容,但不確定如何將這種方式與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();

任何幫助表示贊賞!

您只需要重復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和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;
}`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM