2014-12-07 3 views
1

나는 블랙 잭 게임을 만들어 자신에게 OOJS를 가르쳐왔다. 모든 것이 잘 진행되고 있지만 무작위로 카드를 만들 때가끔 카드를 만들어서 같은 카드를 두 번 처리합니다. 중복 된 카드를 제거하는 논리를 작성하여이를 피하려고합니다.이 코드는 중복 배열 요소를 제거하는 방법은 무엇입니까?

그래서이 토론을 발견했습니다.

https://stackoverflow.com/a/840849/945517

아래 코드 :

function eliminateDuplicates(arr) { 
    var i, 
     len=arr.length, 
     out=[], 
     obj={}; 

for (i=0;i<len;i++) { 
    obj[arr[i]]=0; 
} 
for (i in obj) { 
    out.push(i); 
} 
return out; 
} 

var a=[]; 
var b=[]; 

a[0]="fish"; 
a[1]="fishes"; 
a[2]="fish"; 
a[3]="1"; 
a[4]="fishes"; 

b=eliminateDuplicates(a); 
console.log(a); 
console.log(b); 

나는 제외하고는 거의 모든 라인 일반적으로 진행하고 있는지 이해 : 그것은 배열을 루프처럼

for (i=0;i<len;i++) { 
    obj[arr[i]]=0; 
} 

보인다 obj의 키를 0으로 설정합니다. 여기서 무슨 일이 일어나고 어떻게하면 처음부터 전달되는 배열의 중복 된 항목을 제거하는 데 도움이됩니까?

감사합니다.

+0

(OT)'a [0] = "fish";'들어 가지 마라! http://jsbin.com/cexoqo/1/edit?html,js,console,output –

+0

이것은 예제 코드이며 내가 작성한 코드가 아니며 배열을 채울 방법이 아니라는 것을 알고 있습니다. – heyjohnmurray

답변

3
{} = {key: value, key2:value2,....} 

위의 내용은 본질적으로 핵심 가치지도입니다. 이 코드는 배열을 반복하고 값이 0 인 키를 맵에 추가합니다. 맵이 기존 값에 액세스하려고하면 값을 0으로 재설정합니다. 쓸데없는 조작이지만 if..else 또는 다른 복잡한 논리는 피할 수 있습니다.

배열이 반복되면 배열을 반복하여 키 값 맵 전체에서 반복하여 키를 가져와야합니다. 키가 고유하므로 키가 고유하므로 항목 목록이 있습니다.

+0

제 게임에서 각 플레이어 카드를 플레이어 고유의 배열에 저장하고 있습니다. 따라서 딜러는 일련의 카드를 가지고 있으며 사용자는 일련의 카드를 가지고 있습니다. 각 카드는 포인트 값, 액면가 및 수트 이름이 들어있는 오브젝트입니다. 위의 예제에서는 문자열 배열을보고 있습니다. 내 카드를 다룰 때 원리는 여전히 동일합니까? 이 예제에서 수행되는 것과 비교할 때 내가하려는 일이 얼마나 더 어렵습니까? 당신이 어떤 이유로 그것을보고 싶다면 가까이 있습니다. – heyjohnmurray

+0

자바 스크립트는 간단하고 복잡한 데이터 유형을 가지고 있습니다. 객체는 복잡한 데이터 유형이며, 키는 variable 값 대신 해당 객체에 대한 참조가됩니다. 당신은 어려운 길을 가고 있지만, 당신은 그 길을 따라 자바 스크립트 OO 원리를 배우고 있습니다. 코드는 두 개의 카드를 비교하고 평등을 결정하는 함수가있는 내부 루프와 함께 중첩 루프가되어야합니다. 게시 된 코드가 그것을 피할 수있는 if..else가 필요합니다. –

1

여기서 가장 중요한 점은 객체가 고유 문자열 당 하나의 속성 만 가질 수 있다는 것입니다. 따라서 i = 0 일 때 obj.fish를 0으로 설정하면 obj에 두 번째 "fish"속성을 추가하지 않습니다 i = 2 일 때

그러면 obj의 모든 속성을 반복 할 수 있습니다. 각 항목은 고유 한 것으로 보장되므로 중복을 제거했습니다.

관련 문제