方法一:利用双层循环,外层循环元素,内层循环时比较值。如果有相同的值则跳过,不相同则push进数组
Array.prototype.distinct=function(){ var arr=this, result=[], len=arr.length; for(var i=0;i<len;i++){ for(var j=i+1;j<len;j++){ if(arr[i]==arr[j]){ i=i+1; j=i; } } result.push(arr[i]); } return result; }
方法二:利用splice直接在原数组中进行操作:双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。注意:删除元素之后,需将元素的长度减1
1 Array.prototype.distinct=function(){ 2 var arr=this, 3 len=arr.length; 4 for(var i=0;i<len;i++){ 5 for(var j=i+1;j<len;j++){ 6 if(arr[i]===arr[j]){ 7 arr.splice(j,1); 8 j--; 9 len--; 10 } 11 } 12 } 13 return arr; 14 }
方法三:利用indexOf和forEach
Array.prototype.distinct=function(){ var arr=this, result=[], len=arr.length; arr.forEach(function(item,i,arr){ // 从传入参数的下一个索引值开始寻找是否存在重复。 if(arr.indexOf(item,i+1)===-1){ result.push(item); } }) return result; }
方法四:利用ES6的set结构
function distinct(arr){ // return [...new Set(arr)] return Array.from(new Set(arr)) } var data=[1,5,8,7,9,6,3,5,3,7,9,1]; console.log(distinct(data));
原文:https://www.cnblogs.com/wangjing-web/p/11915772.html