小提琴:https://jsfiddle.net/zhaem/po12voLL/1/
我写了一个脚本,让我具体说明我要显示的随机数的数量,以及这些数字中的任何一个的最大值。像这样:
var randomLimit = 100000
var numberCount = 20
var counter = 0;
document.write("<h1>" + numberCount + " random numbers. Max value of " + randomLimit + "</h1>" );
function randomNumber(limit) {
return Math.floor( Math.random() * limit ) + 1;
}
while ( counter < numberCount ) {
document.write(randomNumber(randomLimit) + "<br>");
counter++;
}
我正在试图弄清楚如何评估所有这些数字并确定最大数字(并使该行项目加粗)。
我尝试通过检查当前的“randomNum”是否大于其他的来实现,但是不起作用并且看起来似乎不是正确的方法,因为它似乎需要等待所有数字在选择最大之前生成?会喜欢任何想法。
while ( counter < numberCount ) {
var randomNum = randomNumber(randomLimit)
if (this.randomNum > randomNum) {
document.write("<strong>" + randomNum + "</strong>" + " ");
} else {
document.write(randomNum + " ");
}
counter++;
}
答案 0 :(得分:3)
您可以拥有一个跟踪最大数字的变量,如果当前数字大于最大数字,则更新它。当您完成生成所有随机数时,找到该数字并加粗。
var randomLimit = 100000
var numberCount = 20
var counter = 0;
var largestNumber = -1;
document.write("<h1>" + numberCount + " random numbers. Max value of " + randomLimit + "</h1>" );
function randomNumber(limit) {
return Math.floor( Math.random() * limit ) + 1;
}
while ( counter < numberCount ) {
var currNumber = randomNumber(randomLimit);
document.write("<span>" + currNumber + "</span><br>");
if (currNumber > largestNumber)
largestNumber = currNumber;
counter++;
}
var list = document.getElementsByTagName("span");
for (var i = 0; i < list.length; i++) {
if (list[i].innerHTML == largestNumber) {
list[i].innerHTML = "<strong>" + largestNumber + "</strong>";
}
}
&#13;
<body>
<div id="layer1">
</div>
<script src="randomNum.js"></script>
</body>
&#13;
答案 1 :(得分:1)
生成数组中的所有数字,找到最大值,然后将其全部写入此代码中。
这不是最好的解决方案,因为它需要在数组上进行3次迭代(一次用于生成,一次用于查找最大值,最后一次用于打印数字)但我认为很清楚,而且我总是犯错误对性能的可读性。
你不能用少于2次迭代解决这个问题,因为你永远不知道下一个值(随机)是否会比前一个更大。
var randomLimit = 100000
var numberCount = 20
var counter = 0;
document.write("<h1>" + numberCount + " random numbers. Max value of " + randomLimit + "</h1>" );
function randomNumber(limit) {
return Math.floor( Math.random() * limit ) + 1;
}
// Generate random numbers
var randomNumbers = []
for( counter = 0; counter < numberCount; counter++ )
randomNumbers.push(randomNumber(randomLimit))
// Find max value
var maxValue = Math.max.apply(this, randomNumbers)
// Write values
randomNumbers.forEach(function(value) {
str = value;
if(value == maxValue) str = "<strong>" + value + "</strong>";
document.write(str + "<br />");
})
答案 2 :(得分:0)
根据您的应用程序,以及您认为可以从较高的集合生成大数字并随机插入它的懒惰程度。不是随意的。
否则,Mozilla开发者网络会说使用Math.max.apply或传播运营商&#39;。按示例传播运算符。
var randomNums = []
while ( counter < numberCount ) {
randomNums.push(randomNumber(randomLimit));
counter++;
}
var maxIs = Math.max(...randomNums), i;
for (i=0; i<numberCount; ++i) {
var num = randomNums[i];
if (num == maxIs) {
document.write('<b>' + num + '</b><br/>');
} else {
document.write(num + '<br/>')
}
}