function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function curveScore(original, curveAmount) {
return original + curveAmount;
}
//Generate a random array
const testScores = Array.from({
length: 20
}, () => getRandomIntInclusive(60, 100));
console.log(testScores);
// Updated testScores with curved scores
testScores.forEach((el, i, curvedScores) => {
curvedScores[i] = curveScore(el, 10);
});
console.log(testScores);
所以,这里一切正常。基本上,生成一个随机的“测试分数”数组,记录这些分数,然后“弯曲”10分,然后再次记录。
有趣的是,我第一次在浏览器中打开它时,我没有得到正确的结果。相同的数组显示2x(未添加10个点)。
刷新浏览器后,我会得到正确的输出。
为什么呢?我想某种程度上console.log()
在forEach()
完成之前发射了2倍?这是否需要Promise或其他东西来一致地显示正确的结果?
答案 0 :(得分:0)
有趣的是,我第一次打开这个 浏览器,我没有得到正确的结果。显示相同的数组 2x(未添加10分)。
刷新浏览器后,我会得到正确的输出。
Chrome粗略地说是日志参考。
关闭控制台工具(无论第一次打开页面无关紧要 [1] ),chrome实际上并没有记录数组,它只是一些记录。当您打开开发工具时,它会两次打印当前版本的参考。
如果dev工具是打开的,另一方面,日志记录实际上发生在每次调用时,这就是你看到数组的两个版本的原因。
要解决此问题,只需实际打印数组的内容即可。例如,调用JSON.stringify
:
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function curveScore(original, curveAmount) {
return original + curveAmount;
}
//Generate a random array
const testScores = Array.from({
length: 20
}, () => getRandomIntInclusive(60, 100));
console.log(JSON.stringify(testScores));
// Updated testScores with curved scores
testScores.forEach((el, i, curvedScores) => {
curvedScores[i] = curveScore(el, 10);
});
console.log(JSON.stringify(testScores));

[1]:只需关闭开发工具,点击刷新并再次打开它,您将看到问题(同一阵列打印两次)仍然发生。
答案 1 :(得分:0)
有以下两种选择:
使用$(document).ready(function() {
// you code here
});
JavaScript
纯window.onload = function() {
// Your code here
}
{{1}}