2015-12-28 10 views
5

Próbuję zwrócić tablicę zawierającą tylko unikatowe elementy, które nie mają duplikatów w tablicy w żadnej określonej kolejności.Zwróć unikalny element, który nie ma duplikatów w tablicy

[1,2,3,3,3,4,4,2] wróci 1

["hello", "truck", 2, "truck", 2, "truck"] wróci "hello"

Do tej pory tylko w stanie powrócić unikalne elementy za pomocą funkcji() filtr, ale nie jestem pewien, gdzie się udać.

Zasadniczo, jeśli istnieją duplikaty, chcę, aby obie wartości zostały usunięte z tablicy.

To brzmi dość prosto, ale mam poważny umysłowy czkot.

Poniżej jest mój kod:

function diff(arr1, arr2) { 
    var newArr = []; 

    newArr = arr1.concat(arr2); 

    newArr = newArr.filter(function(elem, index, self) { 
     return index == self.indexOf(elem); 
    }); 

    console.log(newArr); 
    return newArr; 

} 

diff([1, 2, 3, 5], [1, 2, 3, 4, 5]); 
//should return 4 
+0

Prawdopodobny duplikat [Usuń duplikaty z tablicy JavaScript] (http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array) – Teemu

+6

Twoja funkcja zajmuje 2 tablice, ale twoje pytanie mówi tylko o jednym szyk. który to jest? – Idos

+2

@Idos Nie chcę być agresywny, ale jeśli spojrzysz na mój kod, zauważysz, że biorę oba argumenty i łączę je w jedną tablicę. – brndng

Odpowiedz

6

Porównaj indexOf i lastIndexOf, jeśli są one równe następnie element nie ma duplikatów. Użyj tej logiki za pomocą .filter.

function diff(arr1, arr2) { 
 
    return arr1.concat(arr2).filter(function(elem, index, self) { 
 
    return self.indexOf(elem)==self.lastIndexOf(elem); 
 
    }); 
 
} 
 

 
alert(diff([1, 2, 3, 5], [1, 2, 3, 4, 5]));

+0

W pełni akceptuję twoją edycję! ;) –

+1

Hehe, tak mi przykro, że nie widziałem twojej odpowiedzi. : | OP proszę zaznaczyć odpowiedź @LyeFish jako właściwą. – void

+0

Nie martw się o to. Twoja pierwsza odpowiedź była na tej samej linii. :) –

-1

Aby dostać tylko unikalne przedmioty w macierzy można użyć metody filter tak:

function unique(val, index, self) { 
    return index === self.indexOf(val); 
} 

Można go używać tak:

var arr = ['1','2','3','3']; 
var uniqueArr = arr.filter(unique); // will return ['1', '2', '3'] 

To będzie działać bez jQuery lub prototype.js & dla tablic z wartościami typów mieszanych.

+0

to faktycznie zwróci '[" 1 "," 2 "," 3 "]' – AmmarCSE

+0

@AmmarCSE woops;) – Idos

+0

Nie widzę, jak to się różni od tego, co już robi. –

1

Można zrobić coś takiego:

function findUniques(arr) { 
    var i = 0; 
    while(i !== arr.length) { 
     if(arr.slice(i+1,arr.length-1).indexOf(arr[i]) > -1) { 
      arr = arr.splice(i,0); 
     } else { 
      i++; 
     } 
    } 
} 

To byłoby pozostawić unikatowe elementy w tablicy w odwrotnej kolejności jak zostały one znalezione. Aby tego uniknąć, należy wykonać iterację od końca tablicy i pozwolić zmniejszyć do zera, jeśli zależy ci na kolejności.

Powiązane problemy