javascript 數組去重 unique


晚上無事,偶然看到這么個小測試,拿來寫一寫,希望大家提建議;

直接上代碼:

 1 Array.prototype.unique = function (isStrict) {
 2     if (this.length < 2)
 3         return [this[0]] || [];
 4     var tempObj = {}, newArr = [];
 5     for (var i = 0; i < this.length; i++) {
 6         var v = this[i];
 7         var condition = isStrict ? (typeof tempObj[v] != typeof v) : false;
 8         if ((typeof tempObj[v] == "undefined") || condition) {
 9             tempObj[v] = v;
10             newArr.push(v);
11         }
12     }
13     return newArr;
14 }

驗證:
var arr = ["9", 9, 1, 3, 8, 7, 7, 6, 6, 5, 7, 8, 8, 7, 4, 3, 1, 22, 22, 'a', 'a','bcd', 'abc', 'bcd'];
var newArr = arr.unique(true);
alert(newArr.join(","));//嚴格模式:9,9,1,3,8,7,6,5,4,22,a,bcd,abc,將其中"9",9認為不同

var newArr = arr.unique();
alert(newArr.join(","));//普通模式:9,1,3,8,7,6,5,4,22,a,bcd,abc,將其中"9",9認為相同

注意:

1、使用臨時對象tempObj,將數組的值作為對象的鍵值,遍歷數組時對當前值根據對象鍵值判斷,不存在就將這個數組的值push到新數組中。提高效率

2、使用類型判斷,如果當前數組值做為對象鍵,所對應的對象值類型與當前值類型一致,則可以根據參數(isStirct嚴格模式)決定是否去重,true表示嚴格,對於字符為22,或數字為22都認為一樣,否則保留

看了一下JavaScript高級程序設計中關於數組的操作,又想到種更簡單的去重方法,代碼如下:

 1 Array.prototype.unique = function () {
 2     var newArr = [];
 3     for (var i = 0; i < this.length; i++) {
 4         if (newArr.indexOf(this[i]) == -1) {
 5             newArr.push(this[i]);
 6         }
 7     }
 8     return newArr;
 9 }
10 var arr = ['a','b',1,4,5,8,4,3,1,'a','1'];
11 alert(arr.unique());//a,b,1,4,5,8,3,1  indexOf默認調用===,因此將1與'1'認為是不同

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM