2017-10-13 79 views
2

我很郁闷,因为这个疯狂的问题。我有一个困难的数据结构由对象和数组组成。 它看起来像这样:Javascript改变对象阵列中所有项目的属性

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(右值),这一切似乎不错。 但是,“checked”和“time”参数也在此数组中的第二个对象(id == 1)中更改。 疯狂的事情是,“位置”参数只能在正确的对象(id == 0)中正确递增。 我试图硬指标的项目在数组一样:

Team.players[0].track... 

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

感谢您的任何建议。

+0

位置定义在哪里?在js中也没有关联数组,所以如果你提供了一个有效的数据示例,它会有所帮助。 –

+1

嗯,你如何初始化轨道数组内的对象..这种气味很重,就像你有副作用一样,因为点对象在阵列是相同的对象 – Jenson

+0

对不起。那应该是 position = Team.players [a] .position; – CMAZE

回答

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

我已经修复了代码。我写错了,所以我道歉。 你现在可以看看吗? – CMAZE

相关问题