0

我正在尝试将一些设置存储在一个对象中。然而,问题在于它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将返回:“music music 0”,这很好,但接下来它会返回:“music speech 0”,而我预计它会返回“speech speech 0”

谁能告诉我我做错了什么?

小提琴

4

1 回答 1

1

由于players[i]是一个对象,当你这样做时settings[players[i]],它将被转换为一个字符串来创建一个数组索引。但是您所有的对象可能都具有相同的toString值,例如"[object Object]". 因此,您所有的player[i]' 都将存储在settings["[object Object]"].

settings如果您在调试器中检查 的值,您可以看到这里发生了什么。

于 2013-09-14T12:47:50.433 回答