//法1 /*思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数组中 */ Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){ var repeat = false; for(var j = 0; j < res.length; j++){ if(this[i] == res[j]){ repeat = true; break; } } if(!repeat){ res.push(this[i]); } } return res; } var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]; console.log(arr.unique1()); //法2 /*思路: 1.先将原数组进行排序 2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置 3.如果不相同,则将该元素存入结果数组中 【因为 去重前数组是排序的,所以去重后的数组也是排序了的】 */ Array.prototype.unique2 = function(){ this.sort(); //先排序 var res = [this[0]]; for(var i = 1; i < this.length; i++){ if(this[i] !== res[res.length - 1]){ res.push(this[i]); } } return res; } var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] console.log(arr.unique2()); //法3 /*思路: 1.创建一个新的数组存放结果 2.创建一个空对象 3.每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。 */ Array.prototype.unique3 = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]] = 1; } } return res; } var arr = [112,112,34,'你好',112,112,34,'你好','str','str1']; console.log(arr.unique3()); //法4 /*思路: 利用Array.prototype.indexOf,但是不支持IE-8,所以需要对indexOf处理一下 */ /*改造下indexOf,支持IE6-8*/ var indexOf = [].indexOf ? function(arr, item) { return arr.indexOf(item); } : function indexOf(arr, item) { for (var i = 0; i < arr.length; i++) { if (arr[i] === item) { return i } } return -1; } function unique(arr) { var ret = []; for (var i = 0; i < arr.length; i++) { var item = arr[i] if (indexOf(ret, item) === -1) { ret.push(item) } } return ret; }
js数组去重
最新推荐文章于 2024-06-01 07:27:22 发布