2010-09-10 15 views

risposta

8

No, non c'è niente di integrato. Inoltre, è necessario essere consapevoli che l'ordinamento predefinito è lessicale, quindi [9, 1, 10].sort() restituirà [1, 10, 9].

Di seguito vi ordinare e rimuovere i duplicati da una serie di numeri a posto:

function sortAndRemoveDuplicates(arr) { 
    arr.sort(function(a, b) { return a - b; }); 
    var copy = arr.slice(0); 
    arr.length = 0; 

    for (var i = 0, len = copy.length; i < len; ++i) { 
     if (i == 0 || copy[i] != copy[i - 1]) { 
      arr.push(copy[i]); 
     } 
    } 
    return arr; 
} 

var arr = [1, 4, 7, 1, 2, 1, 3, 10, 1, 4, 10]; 
sortAndRemoveDuplicates(arr); 
console.log(arr); // [1, 2, 3, 4, 7, 10] 
+0

Grazie mille !!! –

4

Il Underscore library è grande per tutti quei tipi di trucchi; Lo adoro e non potrei vivere senza di esso !!

Una volta si dichiara, si chiama le sue funzioni utilizzando la sottolineatura, in questo modo:

_.uniq([1, 4, 7, 1, 2, 1, 3, 1, 4]); 
=> [1, 4, 7, 2, 3] 

Se volete che sia ordinato:

_.uniq([1, 4, 7, 1, 2, 1, 3, 1, 4]).sort(); 
=> [1, 2, 3, 4, 7] 

Dalla pagina linkato sopra:

"Underscore fornisce 60 funzioni dispari che supportano sia i soliti sospetti funzionali: mappa, seleziona, invoca - così come gli helper più specializzati: binding di funzioni, javasc strappare i modelli, test approfonditi sull'uguaglianza e così via. "

+0

+1 per Underscore - ma se l'OP sta chiedendo una funzione javascript che faccia ciò che dice 'uniq', perché non lo estrae per risolvere il suo problema, e poi fai notare che tutto questo e altro possono essere trovati nella libreria ? :-) –

+2

Bene ... _.uniq usa _.reduce che usa _.each ... Non sarebbe molto esplicito ... – Bambax

1
Array.prototype.unique = function(){ 
    for(var i = 0; i < this.length; i++){ 
     if(this.indexOf(this[i], i+1) != -1){ 
      this.splice(i,1); 
      i--; 
     } 
    } 
    return this.sort(); 
} 

var x = [1,'x', 4, 7, 1, 2, 1,'x', 3, 1, 4]; 
x.unique() // [1, 2, 3, 4, 7, "x"] 
1

Come di JavaScript 1.6, Array.filter() può essere utilizzato per rimuovere i valori duplicati:

[1, 4, 7, 1, 2, 1, 3, 1, 4] 
    .filter(function (value, index, self) { 
     return self.indexOf(value) === index; 
}); 

rendimenti

[1, 4, 7, 2, 3] 

Cosa c'è di bello su filtro funziona su tutti i tipi di valore nell'array:

[1, "d", 4, "e", 7, "e", 1, "a", 2, "d", 1, "b", 3, "c", 1, "e", 4] 
    .filter(function (value, index, self) { 
     return self.indexOf(value) === index; 
    }); 

rendimenti

[1, 2, 3, 4, 7, "a", "b", "c", "d", "e"] 
Problemi correlati