★最原始的数组去重的方法:利用for循环,if判断语句,数组中的两个方法indexOf()和push(); var arr=[1,2,3,4,5,4,3,2,1]; var newArr=[]; for(var i=0;i<arr.length;i++){ //判断arr[i]第一次出现的位置跟-1是否相等,如果不等说明重复了,如果等于-1,说明不存在,需要添加到newArr中 //例如:i=1,此时arr[i]=2,而arr.indexOf(2)没有存在过,所以他的下标是-1,执行if语句中,反之不进入if语句 if(newArr.indexOf(arr[i])==-1){ newArr.push(arr[i]) } } console.log(newArr);
★利用for循环,if判断语句,数组中的两个方法indexOf()和push(); var arr=[1,2,3,4,5,4,3,2,1]; var newArr=[]; for(var i=0;i<arr.length;i++){ //判断arr[i]第一次出现的位置跟当前i是否相等,如果不等说明重复了,不进入if语句中 //例如:i=6,此时arr[i]=4,而arr.indexOf(4)第一次出现的下标是3,所以3≠6,不进入if语句里边,直接执行i++ if(arr.indexOf(arr[i])==i){ newArr.push(arr[i]) } } console.log(newArr);
★实现原理:先将原数组arr进行排序,相同的元素紧挨着存放,并将arr中的第一项存入新数组中,for循环遍历arr, 判断arr中的每一项是否在newArr中存在,如果不存在执行if语句,因为一开始将arr中第一项存入了newArr中, 所以遍历arr时直接从下标为1的项开始遍历 var arr=[1,2,3,4,5,4,3,2,1]; arr.sort();//将数组排序 var newArr=[arr[0]]; for(var i=1;i<arr.length;i++){ if(arr[i]!==newArr[newArr.length-1]){ newArr.push(arr[i]) } } console.log(newArr);
★实现原理:外层for循环下标从0开始遍历数组,内层循环下标从外层循环+1开始遍历数组, 判断数组中前一项和后一项是否相等,如果相等用splice()方法删除重复的那一项,并且将内存循环下标减1 var arr=[1,2,3,4,5,4,3,2,1]; 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); j--; } } } console.log(arr);
★用了数组的三个方法reduce()、indexOf()和push(); var arr=[1,2,3,4,5,4,3,2,1]; var newArr=arr.reduce(function(prev,cur){ prev.indexOf(cur)===-1&&prev.push(cur); return prev; },[]); console.log(newArr);
★给原型添加方法,然后继承1 Array.prototype.uniquel=function(){ var res=[this[0]]; for(var i=1;i<this.length;i++){ var flag=false;//假设一开始没有重复的 for(var j=0;j<res.length;j++){ if(this[i]==res[j]){ flag=true;//进入if语句,说明有重复项 break; } } if(!flag){ res.push(this[i]) } } return res; } var arr=[1,2,3,4,5,4,3,2,1]; console.log(arr.uniquel());
★给原型添加方法,然后继承2 Array.prototype.unique2=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=[1,2,3,4,5,4,3,2,1]; console.log(arr.unique2());