제거

2012-03-17 2 views
3

가능한 중복 :
Easiest way to find duplicate values in a JavaScript array
Javascript array sort and unique제거

나는 다음과 같은 배열 내가 중복 요소를 제거하는 방법

var output = new array(7); 
    output[0]="Rose"; 
    output[1]="India"; 
    output[2]="Technologies"; 
    output[3]="Rose"; 
    output[4]="Ltd"; 
    output[5]="India"; 
    output[6]="Rose"; 

에게 있습니다 어떤 방법이 있나? 그것을 할 수 있습니까?

+0

같은 기능을 쓸 수있다? 기본적으로 사용할 수있는 기능은 없지만 직접 작성하는 것은 어렵지 않습니다. – Halcyon

+0

이것은 이미 질문되었습니다 .. http://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript 그리고 거기에 솔루션은 정말 영리하고 좋은 .. – prasann

+0

난 (var i = 0; i vishnu

답변

9

당신은 당신이 시도 이것이

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; 
}` 

확인이 here

1

우선 배열 리터럴 (var output = [])을 사용하여 배열을 선언하고 싶습니다. 둘째, 배열을 반복하고 모든 값을 두 번째 배열에 저장하려고합니다. 첫 번째 배열의 값이 두 번째 배열의 값과 일치하면 루프를 삭제하고 계속 반복합니다.

코드는 다음과 같습니다

var output = [ 
    "Rose", 
    "India", 
    "Technologies", 
    "Rose", 
    "Ltd", 
    "India", 
    "Rose" 
] 

var doubledOutput = []; 

for(var i = 0; i < output.length; i++) { 
    var valueIsInArray = false; 

    for(var j = 0; j < doubledOutput.length; j++) { 
     if(doubledOutput[j] == output[i]) { 
      valueIsInArray = true; 
     } 
    } 

    if(valueIsInArray) { 
     output.splice(i--, 1); 
    } else { 
     doubledOutput.push(output[i]); 
    } 
} 

는 위의 코드가 안된 오류를 포함 할 수 있습니다.

+0

원인을 알 수없는 downvote에 대한 이유를 물어볼 수 있습니까? 이것은 Javascript에서 초보자를위한 중복 값을 찾는 단순하고 읽기 쉽고 쉬운 방법입니다. 분명히 복잡하고 과도한 해결책이 필요하지 않습니다. –

+0

나는 downvote하지 않았지만, 당신은 둘 다'i' *와 * 항목을 삭제하고 있습니다. 원소를 접합 할 때 우물을 감소시키지 않는 한 그런 식으로 원소가 빠지게됩니다. – pimvdb

+0

죄송합니다, 예, 역 루프를 사용해야합니다. 내 나쁜, 잡은 고마워. –

3
당신이 필요로하는 것보다 어쩌면 더 복잡한

하지만 : 당신은 유지 (자바 스크립트 객체를 사용하여) 임시 해시 테이블을 사용하여 배열에서 DUPS을 제거 할 수 있습니다 http://phpjs.org/functions/array_unique:346

+1

OP에 비해 복잡해질 수 있다고 생각하지 않습니까? 그는 분명히 자바 스크립트에 들어가기 만합니다. 그런 다음 다시 복사하여 붙여 넣기 만하면 마법 기능이 그 트릭을 수행 할 수 있습니다.하지만 그다지 도움이되지 않거나 좋은 학습 정신이 아닙니다. –

+0

방금 ​​시작한 것만 큼 복잡한 일입니다. 나는 그가 복사 - 붙여 넣기 해결책을 필요로한다고 생각했다. – nathanjosiah

1

:

function array_unique (inputArr) { 
    // Removes duplicate values from array 
    var key = '', 
     tmp_arr2 = {}, 
     val = ''; 

    var __array_search = function (needle, haystack) { 
     var fkey = ''; 
     for (fkey in haystack) { 
      if (haystack.hasOwnProperty(fkey)) { 
       if ((haystack[fkey] + '') === (needle + '')) { 
        return fkey; 
       } 
      } 
     } 
     return false; 
    }; 

    for (key in inputArr) { 
     if (inputArr.hasOwnProperty(key)) { 
      val = inputArr[key]; 
      if (false === __array_search(val, tmp_arr2)) { 
       tmp_arr2[key] = val; 
      } 
     } 
    } 

    return tmp_arr2; 
} 

코드에서 촬영 어레이에서 이미 본 이미지를 추적합니다. 이것은 문자열 (문자열 또는 숫자가 대부분)으로 유일하게 표현 될 수있는 배열 값에 대해서는 작동하지만 객체에 대해서는 작동하지 않습니다. 임시 인덱스가 배열의 선형 검색보다 몇 배는 더 빠르게 될 것 같은 객체를 사용하여, 상당한 크기의 배열 http://jsfiddle.net/jfriend00/sVT7g/

:

function removeDups(array) { 
    var index = {}; 
    // traverse array from end to start 
    // so removing the current item from the array 
    // doesn't mess up the traversal 
    for (var i = array.length - 1; i >= 0; i--) { 
     if (array[i] in index) { 
      // remove this item 
      array.splice(i, 1); 
     } else { 
      // add this value to index 
      index[array[i]] = true; 
     } 
    } 
} 

다음은 작업 예입니다.