今天来研究下数组去重的方法,从网上查看了些资料,进行了些整理,把可能会产生错误结果的方法删除了,记录下,加油。
1.第一种方法:思路如下
(1)新建一个新的数组存放去重的结果。
(2)for循环中每次从原数组取出一个元素,用这个元素循环与结果数组对比,如果没有重复,则push到新数组中。
Array.prototype.removeRepeat1 = 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.removeRepeat1());
2.第二种方法,原理如下
创建一个新的数组存放结果数组,创建一个空对象来进行判断,for循环时,每次取出一个元素与对象进行对比,
如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为真,存入到第2步建立的对象中。
Array.prototype.removeRepeat2 = function(){
var res = [];
var json = {};
for(var i=0;i<this.length;i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = true;
}
}
return res;
};
var arr = [112,112,34,'你好',112,112,34,'你好','str2','str1'];
console.log(arr.removeRepeat2());
3.第三种方法:直接删除后边重复元素,直接上代码
Array.prototype.removeRepeat3 = function(){
for(var i=0;i<this.length;i++){
for(var j=i+1;j<this.length;j++){
if(this[i] === this[j]){
this.splice(j,1);
j--;
}
}
}
return this;
};
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
console.log(arr.removeRepeat3());