对前端人员来说,数组去重在面试时被问的几率是很大的,那么数组去重到底是如何实现的呢?下面我们来看看几种数组去重的方法吧~~
-
forEach方法 ? ? ?
代 码 如 下 所 示 : \color{red}{代码如下所示:} 代码如下所示:
function norepeat(arr){ var newarr=[]; arr.forEach(function(value,key){ if(newarr.indexOf(value)==-1){ newarr.push(value); } }); return newarr; } var arr=[11,22,11,44,11,44]; console.log(norepeat(arr));
结 果 如 下 所 示 : \color{red}{结果如下所示:} 结果如下所示:
[11,22,44]
-
for in方法(下标查询) ? ? ?
代 码 如 下 所 示 : \color{red}{代码如下所示:} 代码如下所示:
function norepeat(arr){ var newarr=[]; for(let i in arr){ if(newarr.indexOf(arr[i])==-1){ newarr.push(arr[i]); } } return newarr; } var arr=[11,22,11,44,11,44,55]; console.log(norepeat(arr));
结 果 如 下 所 示 : \color{red}{结果如下所示:} 结果如下所示:
[11,22,44,55]
-
sort()? ? ?
先将原数组排序,再与相邻的进行比较,如果不同则存入新数组
代 码 如 下 所 示 : \color{red}{代码如下所示:} 代码如下所示:
function norepeat(arr){ var newarr=arr.sort(); var res=[newarr[0]]; for(var i=0;i<newarr.length;i++){ if(newarr[i]!=res[res.length-1]){ res.push(newarr[i]); } } return res; } var arr=[1,2,1,3,2,9,3,4]; console.log(norepeat(arr));
结 果 如 下 所 示 : \color{red}{结果如下所示:} 结果如下所示:
[1, 2, 3, 4, 9]
-
splice ? ? ?
代 码 如 下 所 示 : \color{red}{代码如下所示:} 代码如下所示:
function norepeat(arr){ var i,j; for(var i=0;i<arr.length;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i]==arr[j]){ arr.splice(j,1); // arr.length--; j--; } } } return arr; } var arr=[1,2,1,3,2,9,3,4,5]; console.log(norepeat(arr));
结 果 如 下 所 示 : \color{red}{结果如下所示:} 结果如下所示:
[1, 2, 3, 9, 4, 5]
-
set ? ? ?
es6方法
代 码 如 下 所 示 : \color{red}{代码如下所示:} 代码如下所示:
方法一: var arr=[1,2,5,4,2,1]; var newarr=new Set(arr); //注意Set是大写 console.log(newarr); // {1, 2, 5, 4} console.log(typeof newarr); 方法二: //以上方法打印出的结果是对象的形式,若是数组的形式,采用以下方法 function norepeat(arr){ //Set数据结构,它类似于数组,其成员的值都是唯一的 return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组 } var arr=[1,2,4,3,2,1]; console.log(norepeat(arr)); //[1, 2, 4, 3]
以上是常见的数组去重的方法,欢迎大家指正!???