2010-09-10 20 views

Odpowiedz

8

Nie, nic nie jest wbudowane. Ponadto musisz pamiętać, że domyślny sort jest leksykalny, więc [9, 1, 10].sort() zwróci [1, 10, 9].

Następujące będzie sortowanie i usuwanie duplikatów z tablicy liczb w kolejności:

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

dziękuję !!! –

4

Underscore library jest dobre dla wszystkich tych rodzajów sztuczek; Uwielbiam to i nie mógłbym żyć bez tego !!

Po zadeklarować ją nazwać swoje funkcje za pomocą podkreślenia, tak:

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

Jeśli chcesz załatwiania:

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

Od strony połączonego powyżej:

"Podkreśla zapewnia 60 nieparzystych funkcji, które obsługują zarówno zwykłych podejrzanych funkcjonalnych: map, select, invoke - jak i bardziej wyspecjalizowanych helperów: binding funkcji, javasc riptowanie, testowanie równości i tak dalej. "

+0

+1 za podkreślenie - ale jeśli OP żąda funkcji javascript, która wykonuje to, co robi 'uniq', dlaczego nie wyciągnąć go, aby rozwiązać swój problem, a następnie zwróć uwagę, że wszystko to i więcej można znaleźć w bibliotece ? :-) –

+2

Cóż ... _.uniq używa _.reduce, który używa _.each ... To nie byłoby bardzo jednoznaczne ... – 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

Począwszy od JavaScript 1.6, array.filter() może być stosowany do usuwania zduplikowanych wartości:

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

powraca

[1, 4, 7, 2, 3] 

Co miło o filtr to działa na wszystkich typach wartości w tablicy:

[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; 
    }); 

powraca

[1, 2, 3, 4, 7, "a", "b", "c", "d", "e"] 
Powiązane problemy