我正在根据 Fisher Yates 方法对值进行随机排序,为了探索这个过程的内部,我尝试找出随机数(
arsam1
是数字固定集,iValue1
和jValue1
为空)数组应该填充序列号i
和随机数j
)。
我想在屏幕上打印数组
iValue1
和 jValue1
。
使用以下代码时,除了看到标题和按钮之外,我根本看不到任何数字。我哪里错了?
我编写了以下代码,我希望在第一个标题和按钮的顶部看到 3 行数字、随机数组、计数器数组
iValue1
和随机化器数组 Value。相反,我什么也没得到。
const arsam1 = [5, 10, 15, 18, 6, 3, 9, 23, 29, 17, 12, 40];
let iValue1 = [];
let jValue1 = [];
document.getElementById("demo").innerHTML = arsam2;
function myFunction() {
for (let i = arsam1.length - 1; i > 0; i--) {
let iValue1[i] = i;
let j = Math.floor(Math.random() * (i + 1));
let jValue1[i] = j;
let k = arsam1[i];
arsam1[i] = arsam1[j];
arsam1[j] = k;
}
}
document.getElementById("iValue").innerHTML = iValue1;
document.getElementById("jValue").innerHTML = jValue1;
<h1>string Templates</h1>
<p>check up string templates</p>
<p id="demo"></p>
<button onclick="myFunction()">Randomize</button>
<p id="iValue"></p>
<p id="jValue"></p>
您需要在
iValue1
之外初始化 jValue1
和 myFunction
以在函数执行后保持它们的值,此外,在 for
循环内,您需要正确地将值设置为 iValue1
和 jValue1
数组。
完成上述操作后,您需要更新 HTML 模板以反映更改。
参考以下代码:
const arsam1 = [5, 10, 15, 18, 6, 3, 9, 23, 29, 17, 12, 40];
let iValue1 = [];
let jValue1 = [];
document.getElementById("demo").innerHTML = `Original Array: [${arsam1.join(', ')}]`; // Show Original Array
function myFunction() {
for (let i = arsam1.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
let temp = arsam1[i]; // Keep a temp variable to hold a value temperorily and swap.
arsam1[i] = arsam1[j];
arsam1[j] = temp;
iValue1[i] = i; // Set iValue1 and jValue1 with current indexes
jValue1[i] = j; // Set iValue1 and jValue1 with current indexes
}
document.getElementById("demo").innerHTML = `Shuffled Array: [${arsam1.join(', ')}]`;
document.getElementById("iValue").innerHTML = `iValue1: [${iValue1.join(', ')}]`;
document.getElementById("jValue").innerHTML = `jValue1: [${jValue1.join(', ')}]`;
}
<html>
<body>
<h1>Shuffle Example</h1>
<button onclick="myFunction()">Randomize</button>
<p id="demo"></p>
<p id="iValue"></p>
<p id="jValue"></p>
</body>
</html>