目前看到最简洁的方式 使用filter去重(但效率不是最高)
myArray = [22,22,33,44,44,55,55]; myArray.filter(function(element, index, arr){return arr.indexOf(element)== index;}) //[22, 33, 44, 55]
使用filter 只有当前元素在数组中第一次出现才push到结果数组
传统的方式
//为Array类型增加函数 使其可以去重
//利用obj的hash特性
Array.prototype.eraseDuplicate = function() { var after = {}; var re = []; for (var i = 0; i < this.length; i++) { if (!after[this[i]]) { after[this[i]] = 1; re.push(this[i]); } } return re; }; console.log([1, 2, 3, 3, 4, 55, 6, 6].eraseDuplicate()); //写一个可以对二位数组去重的 找出出现过的数字(不重复) var arr = [2, 3, [4, 6, [3, 8]], 12, 10]; Array.prototype.getUnq = function() { var rs = []; var arr = this; (function getUnique(arr) { for (var i = 0, len = arr.length; i < len; i++) { if (arr[i].constructor == Array) { arguments.callee(arr[i]); } else { if (rs.indexOf(arr[i]) == -1) { rs.push(arr[i]); } } } })(arr); return rs; } rs = arr.getUnq(); console.log(rs); //PS 递归函数应始终使用arguments.callee
还有一种方式 如果只是去除重复元素 对数据顺序没有要求的话 可以先对数组排序 然后挨个比较 如果当前和前一个相同 就去掉当前
参考刘春龙的博客http://php.js.cn/blog/array-unique-in-javascript/ 博客中的方案3 和 我这里面提到的第一个是同一种思想
这种貌似是效率最高的
Array.prototype.unique4 = function() { this.sort(); var re=[this[0]]; for(var i = 1; i < this.length; i++) { if( this[i] !== re[re.length-1]) { re.push(this[i]); } } return re; }