Javascript更改对象数组中所有项的属性

时间:2017-10-13 08:51:46

标签: javascript arrays object

由于这个疯狂的问题,我很沮丧。 我有一个由对象和数组组成的困难数据结构。 它看起来像这样:

Team{
    name: "name_of_team",
    players: [

        // PLAYER 1
        {
            id: 0,
            position: 0,
            track:[

                // POINT 1
                {
                    time: 0,
                    checked: false
                },

                // POINT 2
                {
                    time: 0,
                    checked: false
                },

                // POINT 3
                {
                    time: 0,
                    checked: false
                }
            ]
        },

        // PLAYER 2
        {
            id: 1,
            position: 0,
            track:[

                // POINT 1
                {
                    time: 0,
                    checked: false
                },

                // POINT 2
                {
                    time: 0,
                    checked: false
                },

                // POINT 3
                {
                    time: 0,
                    checked: false
                }
            ]
        }
    ]
}

所以我可以跟踪玩家。当团队中的一个进入指向时,其参数检查变为true,时间节省了获取此区域的时间。 我的功能如下:

var a = Team.players.findIndex(x => x.id === 0);
var position = Team.players[a].position;
Team.players[a].track[position].checked = true;
Team.players[a].track[position].time = new Date();
Team.players[a].position++;

当我检查参数" a"它被设置为0(正确的值),这一切似乎都很好。 但是"检查"和"时间"参数也会在此数组中的第二个对象(id == 1)中更改。 疯狂的是"位置"参数仅在右对象中正确递增(id == 0)。 我试图在数组中对项目进行硬索引,如:

Team.players[0].track...

但它的行为相同。 有没有人经历过这样的事情或任何想法如何避免第二个对象与第一个对象一起被修改。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

假设

Team.players[a].position

是位置,然后使用它。

var a = Team.players.findIndex(x => x.id === 0);
Team.players[a].track[Team.players[a].position].checked = true;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^
Team.players[a].track[Team.players[a].position].time = new Date();
//                    ^^^^^^^^^^^^^^^^^^^^^^^^
Team.players[a].position++;