2010-09-10 28 views

Trả lời

8

Không, không có gì tích hợp sẵn. Ngoài ra, bạn cần lưu ý rằng loại mặc định là từ vựng, do đó, [9, 1, 10].sort() sẽ trả lại [1, 10, 9].

Sau đây sẽ sắp xếp và loại bỏ bản sao từ một mảng các số ở vị trí:

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

Cảm ơn rất nhiều !!! –

4

Các Underscore library là rất tốt cho tất cả những loại thủ đoạn; Tôi thích nó và sẽ không thể sống mà không có nó !!

Khi bạn khai báo nó, bạn gọi chức năng của mình bằng cách sử dụng các dấu gạch dưới, như thế này:

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

Nếu bạn muốn nó được sắp xếp:

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

Từ trang liên kết ở trên:

"Gạch dưới cung cấp các hàm 60 kỳ quặc hỗ trợ cả các nghi phạm chức năng thông thường: ánh xạ, chọn, gọi - cũng như các trình trợ giúp chuyên biệt hơn: function binding, javasc ript templating, kiểm tra bình đẳng sâu, và như vậy. "

+0

+1 cho gạch dưới - nhưng nếu OP yêu cầu một hàm javascript làm những gì 'uniq' làm, tại sao không kéo nó ra để giải quyết vấn đề của mình, và sau đó chỉ ra rằng tất cả điều này và nhiều hơn nữa có thể được tìm thấy trong thư viện ? :-) –

+2

Vâng ... _.uniq sử dụng _.reduce sử dụng _.each ... Điều đó sẽ không rõ ràng ... – 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

Như JavaScript 1.6, array.filter() thể được sử dụng để loại bỏ các giá trị trùng lặp:

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

lợi nhuận

[1, 4, 7, 2, 3] 

gì tốt đẹp về bộ lọc là nó hoạt động trên tất cả các loại giá trị trong mảng:

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

trả về

[1, 2, 3, 4, 7, "a", "b", "c", "d", "e"] 
Các vấn đề liên quan