2015-12-28 17 views
5

Sto tentando di restituire un array con solo elementi univoci che non hanno duplicati all'interno dell'array in nessun ordine particolare.Restituisce un elemento univoco che non ha duplicati in un array

[1,2,3,3,3,4,4,2] sarebbe tornare 1

["hello", "truck", 2, "truck", 2, "truck"] sarebbero tornati "hello"

Finora ho solo stato in grado di tornare elementi unici che utilizzano la funzione() di filtro, ma non sono sicuro dove andare.

Fondamentalmente se ci sono duplicati voglio entrambi i valori rimossi dall'array.

Sembra abbastanza semplice, ma sto avendo un serio singhiozzo mentale.

Qui di seguito è il mio codice:

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

Possibile duplicato di [Rimuovi duplicati dalla matrice JavaScript] (http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array) – Teemu

+6

La tua funzione richiede 2 matrici, ma la tua domanda menziona solo una array. cos'è questo? – Idos

+2

@Idos Non intendo essere abrasivo, ma se osservate il mio codice noterete che prendo entrambi gli argomenti e concatenandoli in un unico array. – brndng

risposta

6

Confrontare il indexOf e lastIndexOf, se sono uguali, allora l'elemento non ha duplicati. Utilizzare .filter con questa logica.

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

Approvo completamente la tua modifica! ;) –

+1

Hehe, mi dispiace tanto non ho visto la tua risposta. : | OP si prega di contrassegnare la risposta @LyeFish come quella giusta. – void

+0

Non preoccuparti. La tua prima risposta è stata sulla stessa linea. :) –

-1

Per ottenere solo gli elementi unici nel vostro array si possono utilizzare il metodo filter in questo modo:

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

Si può usare in questo modo:

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

Funzionerà senza jQuery o prototype.js & per array con valori di tipi misti.

+0

restituisce effettivamente '[" 1 "," 2 "," 3 "]' – AmmarCSE

+0

@AmmarCSE woops;) – Idos

+0

Non vedo come questo sia diverso da quello che sta già facendo. –

1

Si potrebbe fare qualcosa di simile:

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

Ciò lascerebbe gli elementi unici nella matrice in ordine inverso di come sono stati trovati. Per evitare ciò, iterate dalla fine dell'array e lasciate che diminuisca a zero, se vi preoccupate dell'ordine.

Problemi correlati