【发布时间】:2018-03-27 02:37:48
【问题描述】:
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 分,然后再次记录。
有趣的是,我第一次在浏览器中打开它时,并没有得到正确的结果。相同的 Array 显示 2x(不添加 10 个点)。
一旦我刷新浏览器,就会得到正确的输出。
为什么?我想console.log() 在forEach() 完成之前以某种方式发射了 2 次?这是否需要 Promise 或其他东西才能始终如一地显示正确的结果?
【问题讨论】:
-
在这里看到预期的结果,您使用的是什么环境?
-
如果我理解正确,您的代码将按预期工作。运行上面的 sn -p。两个数组将打印在日志中,第二个数组的每个元素增加 10。这就是你想要的。对吗?
-
您遇到了this problem。引用的是对象,而不是值,并且会实时更新。如果你想保留原始数组,我建议你打印一些字符串化的版本。
-
是的...除了,每次我在开发工具中使用此文件打开 index.html 时,第一次显示相同的数组(不增加 10) . 只有在刷新浏览器后,它才会第二次显示更新的数组! @VicJordan
-
考虑使用
map函数而不是forEach。
标签: javascript arrays ecmascript-6