我希望从文本文件中拉出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();
感谢任何帮助!
答案 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;
}`