I have a for loop that generates html. I'd for this method to generate the elements randomly. Right now they are cardinally generated i.e. d1, d2, ... di. I want them to follow a random sequence i.e. d1, di, di-3, .. di-k.
for (let i = numberOfInputs; i < dlArray.length+numberOfInputs; i++){
html +='\t\t\t\t\t\t<tr>\n'
html += '\t\t\t\t\t\t<td id="row';
id = (1+i-numberOfInputs);
html += id;
html +='">\n';
html += '\t\t\t\t\t\t\t<div id=\"t';
html += id;
html +='" class=\"ltarget\">'
html +='</div>\n'
html +='\t\t\t\t\t\t</td >\n'
html +='\t\t\t\t\t\t<td id=\"d'
html += id
html += '\">\n'
html +=`\t\t\t\t\t\t\t${dlArray[i-numberOfInputs]}\n`;
html +='\t\t\t\t\t\t\t</td >\n'
html +='\t\t\t\t\t\t</tr>\n';
}
Any help with this would be greatly appreciated. Thanks.
This is a slightly shorter implementation of the table generator using a Durstenfeld shuffle to generate an arbitrary order of the idx array which is then used to output the elements of the dlArray array:
function shfl(a){
for(let j,i=a.length;i>1;){
j=Math.floor(Math.random()*i--);
if (i!=j) [a[i],a[j]]=[a[j],a[i]]
}
return a
}
const dlArray="abcdefghij".split(""),
idx=[...Array(dlArray.length)].map((_,i)=>i+1);
document.querySelector("div").innerHTML = '<table id="tablestyle">'
+shfl(idx).map(i=>
`<td id="row${i}"><div id="t${i}" class="ltarget">${i}</div></td ><td id="d${i}">${dlArray[i-1]}</td ></tr>`).join("\n")+'</table>';
<div></div>