我正在尝试在对象中存储一些设置。但问题是obj[arr[i]]
与arr[i]
for (var i = 0; i < players.length; i++) {
if (players[i].volume < 1) players[i].volume = (Math.round((players[i].volume + 0.1) * 10) / 10); // JS math error fix
settings[players[i]] = settings[players[i]] || players[i];
settings[players[i]].volume = players[i].volume;
console.log(settings[players[i]].id + " " + players[i].id + " " + players[i].volume);
}
console.log
将返回此信息:“音乐音乐0”,这很好,但接下来它将返回:
“音乐演讲0”,而我期望它返回“演讲0”
谁能告诉我我做错了什么?
答案 0 :(得分:1)
由于players[i]
是一个对象,当你执行settings[players[i]]
时,它将被转换为字符串以生成数组索引。但是,您的所有对象可能具有相同的toString
值,例如"[object Object]"
。因此,您的所有player[i]
都将存储在settings["[object Object]"]
。
如果您在调试器中检查settings
的值,可以看到此处发生了什么。