2012-03-20 2 views
1

플레이어로 알려진 객체 배열을 자주 정렬합니다. 따라서 특정 플레이어의 인덱스가 매 라운드마다 변경됩니다. 두 명의 플레이어가 게임을 마친 후에는 새로운 점수로 오브젝트를 업데이트하고 싶습니다. 내가 사용할 수있는 몇 가지 기능이 나는 배열, O (1) 액세스 시간을 알고배열 요소 편집

function updatePlayer(player){ 
    for(var i=0;i<players.length;i++) 
    { 
     if(players[i].name === player.name) 
      players[i] = player; 
    } 
} 

: 내가 생각할 수있는 유일한 방법은 O (n)이 알고리즘은 (I 자바 스크립트에 새로 온 사람)이 작업을 수행하는 이것의 순서를 줄이기 위해 (아마도이 ​​기능에 대한 필요성을 완전히 제거 할 수도 있습니다)?

유용한 정보 :

  • 나는 자바 스크립트에 비교적 새로운 해요, 그래서 더 나은 대답은 더/I가 가장 내용 설명이다.
  • jQuery로 아직 연주하지 않았으므로이를 피하는 것이 좋습니다. jQuery없이이 작업을 수행 할 수있는 방법이 없다면 그것을 배워야 할 것입니다.

답변

2

정말 문제가되지 않는 한, 그대로 두겠습니다. 정말 조기 최적화 같아 보입니다.

몇 명의 플레이어가 있습니까? 그리고이 루프가 응용 프로그램을 느리게하고 있다는 것을 알고 있습니까? for 루프는 꽤 일반적이며,이 루프는 계산 집약적이지 않습니다.

실제로 부기 및 빠른 액세스를 위해 별도의 데이터 구조를 사용할 수 있지만 실제로 필요할 때만 수행해야합니다. 그 이유는 데이터 구조를 동기화 상태로 유지하는 데 많은 노력이 필요하고, 버그가 발생할 수도 있기 때문입니다.

+0

아마도 가장 좋은 답변 일 것입니다. 불행히도 Javascript를 배울 때 많은 도움이되지는 못했지만 이봐, 아직 좋은거야. – SomeKittens

2

개체가 객체 인 경우 키가 이름 인 다른 배열을 유지하지 않는 것이 좋습니다.
정렬을위한 하나의 배열 빠른 액세스를위한 하나의 배열.

2

플레이어를 배열 대신 개체로 저장하십시오. 그럼 당신은 이름으로 플레이어 (또는 다른 고유 키)에 액세스 할 수 있습니다 :

http://jsfiddle.net/RBwgv/

var players = { 
    "Player1": { 
     "Score": 0, 
     "OtherStuff": "test" 
    }, 
    "Player2": { 
     "Score": 100, 
     "OtherStuff": "test" 
    }, 
    "Player3": { 
     "Score": 5, 
     "OtherStuff": "test" 
    } 
}; 

for (player in players) { 
    alert('player ' + player + '\'s score is ' + players[player].Score); 
} 
2

한 가지 방법은 플레이어가 직접 객체를 확장하는 것입니다. 예를 들어

, 플레이어는 다음과 같이 정의 된 경우 :

function Player(newName) { 
    this.name = newName; 
} 

당신은 프로토 타입 속성을 확장 할 수 있습니다.

Player.prototype.index = 0; 

이 시점에서 모든 플레이어 개체에는 배열의 위치를 ​​나타내는 인덱스 속성이 있습니다.

이런 식으로 생각할 수있는 다른 방법이 있지만 이것이 내 생각의 맨이었습니다.