来自文本文件的 Javascript 随机数组

Javascript Shuffle Array from Text File

本文关键字:Javascript 随机 数组 文件 文本      更新时间:2023-09-26

我希望从文本文件中提取 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();

任何帮助不胜感激!

生成 5 个介于 1 和 n 之间的随机数(其中 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;
}`

你只需要在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();