2016-12-21 1 views
1

I는 다음과 같습니다 $('.player').each(function()에서 생성 된 배열이 :이 배열은 처음 두 (만 근처의 값을 병합 할 것는 자바 스크립트와 배열에 가까운 중복 된 값을 병합

["foo"] 
["foo"] 
["bar"] 
["bar"] 
["bar"] 
["foo"] 
["somethingelse"] 

을 어떤 foo의 인덱스 위와 아래에 있기 때문에 foo의하지만 마지막) :

["foo"] 
["bar"] 
["foo"] 
["somethingelse"] 

사람이 같은 값에 가까운 경우 내) (중복 값을 병합하는 방법에 대한 올바른 방향으로 날 포인트 정렬?

지금까지 내가 가진 유일한 방법은 있지만, 슬프게도 인덱스가 어떤 인덱스인지에 관계없이 값을 병합합니다.

var uniqueNames = []; 
$.each(fruits, function(i, el){ 
    if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el); 
}); 
console.log(uniqueNames); 

편집 : 코드를 완벽하게 작동시켜 주셔서 감사합니다. 필자가 아는 한, 두 개의 foos를 병합하여 foo2로 이름을 바꾸려면 어떻게해야할까요?

+3

'var uniqueNames = fruits.filter ((value, index, array) =>! index || value! == array [index-1]); ' – Thomas

+0

@ 토마스, 이것은 정답이다 – Sebas

+0

내 힘내라. 너는 나에게 두통을 저장했다. 정말 고맙습니다 ! – pawndev

답변

0

:

var RemoveDuplicates = function(arr){ 
 
    if(arr.length<2)    //Array is too short to have duplicates 
 
    return arr 
 
    var ret = [arr[0]]    //First item cannot be a duplicate 
 
    for(var i=1;i<arr.length;i++){ //Loop over all other items 
 
    if(arr[i-1]!=arr[i])   //If previous item is the same, ignore this item 
 
     ret.push(arr[i]);   //Previous item was different, so keep current 
 
    } 
 
    return ret; 
 
} 
 

 
arr = ["foo","foo","bar","bar","bar","foo","somethingelse"] 
 
arr = RemoveDuplicates(arr) 
 
console.log(arr)

0

나는 순수 JS와 함께 다음과 같이 할 수 있습니다 생각

var arrs = [["foo"],["foo"],["bar"],["bar"],["bar"],["foo"],["somethingelse"]], 
 
    result = arrs.reduce((p,c,i,a) => i ? c[0] !== a[i-1][0] ? (p.push(c),p) : p 
 
             : (p.push(c),p),[]); 
 
console.log(result);
다음과 같이 O(N)에-정직하고, 순수 JS 사용하여이 작업을 수행 할 수

관련 문제