数组去重二则
前端攻城狮学习笔记五:继承、原型、setInterval、数组去重一文中数组去重的题目,我想到的两种做法,记录之
两种方法都是直接操纵原始数组,未创建新数组,以提高性能
Array.prototype.distinct = function(){ for(var i = 0, l = this.length; i < l; i++){ var currentItem = this[i]; var j = i + 1; while(j < l){ var nextItem = this[j]; if(currentItem == nextItem){ this.splice(j, 1); l--; j--; } j++; } } return this; }
后面这种方法存在的问题,lastIndexOf是JS1.6新增的,之前版本的不一定支持(From 菜鸟程序猿)
Array.prototype.distinct = function(){ var undefinedFlag = false; for(var i = 0, l = this.length; i < l; i++){ var currentItem = this[i]; // 只保留第一个undefined数组元素 if(undefinedFlag && currentItem === void 0){ this.splice(i, 1); l--; i--; continue; } // 找当前元素的最后一个重复元素 var lastRepeatIndex = this.lastIndexOf(currentItem); while(lastRepeatIndex > i){ // 删除重复元素 this.splice(lastRepeatIndex, 1); // 继续找当前元素的最后一个重复元素 lastRepeatIndex = this.lastIndexOf(currentItem); // 数组长度-1 l--; } } return this; }