2010-09-10 70 views

回答

8

沒有,有沒有內置。此外,您還需要注意的是,默認的排序是詞彙,所以[9, 1, 10].sort()將返回[1, 10, 9]

下面將進行排序,並從數字陣列到位刪除重複:

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

非常感謝! – 2010-09-10 14:42:41

4

Underscore library是偉大的,所有這些權謀;我喜歡它,如果沒有它,它將無法生存!

一旦你把它聲明,您可以通過使用下劃線調用它的函數,比如:

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

如果你需要它有序:

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

從上面的鏈接頁面:

「Underscore提供60多種功能,支持常見的功能嫌疑人:map,select,invoke - 以及更多專門的幫助程序:函數綁定,javasc剽竊模板,深度平等測試等等。「

+0

對於Underscore而言+1 - 但是如果OP要求一個執行'uniq'操作的javascript函數,爲什麼不把它解出來解決他的問題,然後指出所有這些以及更多可以在庫中找到? :-) – 2010-09-10 15:27:23

+2

呃... _.uniq使用_.reduce,它使用_each ...這不會很明確... – Bambax 2010-09-10 15:43:42

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

如JavaScript 1.6,array.filter()可用於刪除重複值:

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

回報

[1, 4, 7, 2, 3] 

約過濾器是它的工作原理是什麼好看對數組中的所有值類型:

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

回報

[1, 2, 3, 4, 7, "a", "b", "c", "d", "e"] 
相關問題