【发布时间】:2022-11-20 23:32:23
【问题描述】:
我将变量 G.playerStatsDifference 定义为一个对象数组:
playerStatsDifference: [{
carpenter: 0,
wood: 0,
gunman: 0,
gunpowder: 0,
merchant: 0,
gold: 0,
fleet: 0,
flagship: 0,
}, {
carpenter: 0,
wood: 0,
gunman: 0,
gunpowder: 0,
merchant: 0,
gold: 0,
fleet: 0,
flagship: 0,
}]
这个变量的要点是计算经常变化的G.playerStats之间的差异。
我计算差异的函数是:
const oldPlayerStats = JSON.parse(JSON.stringify(G.playerStats));
statsDifference(G, oldPlayerStats);
for (let p = 0; p < 2; p++) {
for (let s = 0; s < 8; s++) {
Object.values(G.playerStatsDifference[p])[s] = Object.values(G.playerStats[p])[s] - Object.values(oldPlayerStats[p])[s];
}
}
预期的输出将是 playerStatsDifference
在运行一些测试时,我做了一些控制台日志记录,它给了我正确的计算,但 G.playerStatsDiffence 不会更新。
这是一些测试,计算是正确的:
console.log("Current wood is " + Object.values(G.playerStats[0])[1]); //Current wood is 5
console.log("Old wood is " + Object.values(oldPlayerStats[0])[1]); //Old wood is 10
console.log(Object.values(G.playerStats[0])[1] - Object.values(oldPlayerStats[0])[1]); //-5
我想也许我在循环中做错了什么所以我之后尝试了以下操作:
Object.values(G.playerStatsDifference[0])[1] = Object.values(G.playerStats[0])[1] - Object.values(oldPlayerStats[0])[1];
但是,这也不起作用。话虽如此,以下确实有效:
G.playerStatsDifference[0].wood = Object.values(G.playerStats[0])[1] - Object.values(oldPlayerStats[0])[1];
所以看起来我对 G.playerStatsDifference 上的 Object.values 有一些疑问。关于为什么会这样以及我如何通过循环运行它的任何想法?
=====
编辑:正如 cmets 中的那些人所指出的,我的问题有点令人困惑,所以我会尝试在这里将其清除。
G.playerStatsDifference 值应该跟踪 G.playerStats 的先前值与 G.playerStats 的当前值之间的差异。
为此,我将 oldPlayerStats 的值设置为等于 G.playerStats,然后将 G.playerStats 更新为其新值。
然后我需要遍历对象数组并从 oldPlayerStats 中减去 G.playerStats 的值。这将产生 G.playerStatsDifference 的值
这就是循环的目的,遍历每个对象键并进行计算。
希望这提供了一些清晰度。对不起,问题措辞不佳。
【问题讨论】:
-
Object.values是根Object类的静态方法。你不能分配给它。用像减法这样的数学运算的结果来调用它也是没有意义的。 -
那么
playerStatsDifference的规模会随着每个新 playerStats 的公布而增长吗? -
@AndrewParks 不,值被替换/更新。
-
@evilgenious448 我这么说并没有冒犯的意思(我们都是从某个地方开始的,不尝试是不会变得更好的)但是你的方法太糟糕了我真的不明白你想要完成什么。也许编辑问题以包含更多背景?
-
@JaredSmith 很好,我将编辑问题以使其更清楚。没有冒犯,感谢您的礼貌回应:)
标签: javascript variables