2017-10-13 1 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 
       } 
      ] 
     } 
    ] 
} 

그래서 플레이어를 추적 할 수 있습니다. 팀 중 하나가 가리킬 때 매개 변수가 참으로 변경되고 시간이이 영역을 가져 오는 시간을 절약합니다. 내 기능은 다음과 같습니다

내가 매개 변수를 확인
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 

가정

+0

여기서 '위치'는 정의되어 있습니까? 또한 js에 연관 배열이 없으므로 유효한 데이터 예제를 제공하면 도움이됩니다. –

+1

Uhm, 트랙 배열 내부의 객체를 어떻게 초기화합니까? 이것은 부작용이있는 것처럼 냄새가 심합니다. 배열은 같은 객체입니다 – Jenson

+0

죄송합니다. 즉, 이어야합니다. position = Team.players [a] .position; – CMAZE

답변

1

후 그냥 사용 위치입니다.

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

관련 문제