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

Javascript更改对象数组中所有项的属性,javascript,arrays,object,Javascript,Arrays,Object,因为这个疯狂的问题,我很沮丧。 我有一个由对象和数组组成的复杂数据结构。 看起来是这样的: Team{ name: "name_of_team", players: [ // PLAYER 1 { id: 0, position: 0, track:[ // POINT 1 {

因为这个疯狂的问题,我很沮丧。 我有一个由对象和数组组成的复杂数据结构。 看起来是这样的:

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
                }
            ]
        }
    ]
}
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++;
所以我可以追踪球员。当团队中的一个到达该点时,其参数checked将更改为true,time将节省获取该区域的时间。 我的函数如下所示:

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
                }
            ]
        }
    ]
}
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)中的“checked”和“time”参数也会改变。 疯狂的是,“position”参数只在正确的对象(id==0)中正确递增。 我尝试对数组中的项进行硬索引,如下所示:

Team.players[0].track...
但它的行为是一样的。 有没有人经历过类似的事情,或者有没有想法如何避免第二个对象和第一个对象一起被修改

谢谢你的建议。

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++;

在哪里定义了
位置
?此外,js中没有关联数组,因此如果提供有效的数据示例会有所帮助。嗯,如何初始化轨迹数组中的对象。。这闻起来很像你有副作用,因为数组中的点对象是同一个对象对不起。应该是position=Team.players[a].position
Player1
Player2
应该是数组中的索引。它们是什么?对象被复制到数组中。我在别处创建了一个轨迹数组,然后将其复制到player.track。当玩家来自同一个团队时,轨迹数组被复制到两个player.trace参数。我已经修复了代码。我写错了,所以我道歉。你现在能看一下吗?