這裡給出2中實現方式。一種是大家應該都知道的indexof檢測的方式,另一種是結合lastindexof和splice實現方式。
//首先給array物件原型上新增indexof和lastindexof方法.(如果沒有的話) if(!array.prototype.indexof)else for(var current;index= length) index = length - 1; } for(var current;index>=0;index--) return -1; } } //很常見的實現方式 var arrayunique1 = function(arr) } return arr; }
測試資料:var arr = [1,2,3,1,2,3,2,1,3,4,2,232];
ie7迴圈10,000次:
arrayunique1為460ms,arrayunique2為190ms。
ff3.5迴圈100,000次:
arrayunique1為170ms,arrayunique2為63ms。
從測試結果上可以看出,通過lastindexof和splice的方式的速度是普通方式的2-3倍。
除了上面描述的2中實現方式外,其實還是有其他實現方式的。jquery中就一種實現方式。我們可以看下具體的**:
unique: function( array ) ; try } } catch( e ) return ret; }
這種是通過建立乙個臨時的物件,然後獲取元素的id儲存在物件的key中。但這種實現方式只能針對物件,對於普通的直接量(如:數字,字串等)是無用的。並且經過測試,這種方式在執行速度上和lastindexof結合splice還是有點差距的。
唯一化演算法
源 git位址 對於無序列表的唯一化演算法 從前往後依次處理節點p,在p的前驅中查詢 通過find函式 值相同者,則呼叫remove函式將相同者刪除 template 刪除重複元素,返回刪除元素個數 int list deduplicate num 下乙個位置查詢 return oldsize rm...
JavaScript陣列整理(一)
var a 1,2,3,4 建立陣列直接量 var b new array 1,2,3,4 呼叫建構函式建立 var c new arrary 10 只有乙個引數的時候表示建立指定長度的陣列 如果省略陣列直接量中的某個值,就會被賦值為undefined var a 1,3 建立的陣列為 1,unde...
《JavaScript框架設計》 1 3 陣列化
瀏覽器下存在許多類陣列物件,如function內的arguments,通過document.forms form.elements doucment.links select.options document.getelementsbyname document.getelementsby tagn...