方法一、先排序再判斷
先對數組進行排序,判斷前一個與后一個相等且不在新數組中的情況下,再把元素放到新數組中去。
Array.prototype.duplicates=function () { var arr = this; var newArr=[]; arr.sort(); for(var i =0;i<arr.length;i++){ if(arr[i]==arr[i+1]&&(newArr.indexOf(arr[i])==-1) ){ newArr.push(arr[i]); i++; } } return newArr; } var a = [1,2,5,4,2,3,1,4,5,3,4]; console.log(a.duplicates());//結果為[1,2,3,4,5]
方法二、兩個for循環
數組中的每一個數均和后面的所有數進行比較,如果存在相等的數且不在新數組中,將該數加到新數組中。
Array.prototype.duplicates=function () { var arr = this; var a=[]; for(var i=0;i<arr.length-1;i++) { for(var j=i+1;j<arr.length;j++) { if(arr[i]==arr[j]&&a.indexOf(arr[i])==-1) { a.push(arr[i]); } } } return a.sort(); } var a = [1,2,5,4,2,3,1,4,5,3,4]; console.log(a.duplicates());//結果為[1,2,3,4,5]
方法三、判斷同一個數字的從前往后和從后往前位置是否一致
循環數組中的每一個數,將從前往后第一次出現的位置和從后往前第一次出現的位置進行比較,如果不想等,說明該數重復。並且該數不在新數組中,將該數加到新數組后面。
Array.prototype.duplicates=function (){ var arr = this; var result = []; arr.forEach(item=>{ if(arr.indexOf(item)!==arr.lastIndexOf(item)&&result.indexOf(item)==-1){ result.push(item); } }) return result; } var a = [1,2,5,4,2,3,1,4,5,3,4]; console.log(a.duplicates());//結果為[1, 2, 5, 4, 3]