在前端面试中,经常会被问到这样的一个问题;就是数组去重的问题,就是去掉重复内容
实现的方法有很多
下面我主要介绍三种方法:
方法一:
是我们平常思路一般想到的;也是最其本的方法,就是两次for循坏,进行一一比较
//最基本的方法,两次for循坏,进行一一比较 Array.prototype.unique1 = function () { //返回的结果数组;进来就取出第一个元素 var result = [this[0]]; for(var i = 1; i < this.length; i++){ var flag = true; for(var j = 0; j < result.length; j++){ if(this[i] == result[j]){ flag = false; break; } } //如果两个数组内容不相等,就把其加到返回的数组中 if(flag){ result.push(this[i]); } } return result; }; var test = [23,'sd',23,2,45,45,23,'sd','打击',23]; console.log(test.unique1());
方法二:
利用indexOf()方法进行判断,一次for循坏就能取出,比第一种方法效率高
//第二种方法,利用indexOf()方法判断 Array.prototype.unique2 =function () { //定义返回的临时数组 var result = []; for(var i = 0; i < this.length; i++){ if(result.indexOf(this[i]) == -1){ //遍历数组,如果返回的结果数组找不到,就把其加进去 result.push(this[i]); } } return result; }; var test = [23,'sd',23,2,45,45,23,'sd','打击',23]; console.log(test.unique2());
方法三:
利用对象的特点进行判断取出,效率最佳
//第三种方法,利用对象取职判断,与第二种方法思想相似(效率比较高) Array.prototype.unique3 = function () { //定义临时返回数组 var result = []; //定义临时存值对象 var obj = {}; for(var i = 0; i < this.length; i++){ //遍历数组,判断对象中是否存在相同的数组内容,以key值形式来判断 if(!obj[this[i]]){ //如果不存在,push到返回的数组中 result.push(this[i]); //同时把其当作key值的形式存入对象,其value值都为1 obj[this[i]] = 1; } } return result; }; var test = [23,'sd',23,2,45,45,23,'sd','打击',23]; console.log(test.unique3());