function duplicates(arr) { var newarr = []; for(var j = 0;j < arr.length;j++){ for(var i = j+1;i < arr.length;i++){ if(arr[j] == arr[i]){ newarr.push(arr[i]); } } } //return [...new Set(newarr)]; return Array.from(new Set(newarr)); }
輸入:
[1, 2, 4, 4, 3, 3, 1, 5, 3]
輸出
[1, 3, 4]數組
方法二:code
function duplicates(arr) { //獲得重複出現過的元素組成的數組 var newarr = []; for(var j = 0;j < arr.length;j++){ if(arr.indexOf(arr[j]) != j){ newarr.push(arr[j]); } } //數組去重 var temp = []; //一個新的臨時數組 for(var i = 0; i < newarr.length; i++){ if(temp.indexOf(newarr[i]) == -1){ temp.push(newarr[i]); } } return temp; }
方法三對象
https://www.nowcoder.com/questionTerminal/871a468deecf453589ea261835d6b78b 若是元素過大的話,方法三很差,由於會遍歷不少次。並且若是原數組中的每一項不全是數值,獲得關聯數組,那麼對數組b的遍歷要作修改 function duplicates(arr) { //聲明兩個數組,a數組用來存放結果,b數組用來存放arr中每一個元素的個數 var a = [],b = []; //遍歷arr,若是以arr中元素爲下標的的b元素已存在,則該b元素加1,不然設置爲1 for(var i = 0; i < arr.length; i++){ if(!b[arr[i]]){ b[arr[i]] = 1; continue; } b[arr[i]]++; } //遍歷b數組,將其中元素值大於1的元素下標存入a數組中 for(var i = 0; i < b.length; i++){ if(b[i] > 1){ a.push(i); } } return a; }
方法四:排序
方法三改進後 function duplicates(arr) { var obj = {}; var repeatList = []; //遍歷數組,將數組的值做爲obj的索引,出現次數爲值 arr.forEach(function(item){ if(obj[item]){ obj[item] +=1; }else{ obj[item] = 1; } }); //獲取對象自身屬性 var propertyNames = Object.getOwnPropertyNames(obj); //遍歷對象,將重複出現的元素取出 propertyNames.forEach(function(item){ if(obj[item] > 1){ repeatList.push(parseInt(item)); } }); return repeatList; }
方法五:索引
function duplicates(arr) { var result = []; arr.forEach(function(elem){ if(arr.indexOf(elem) !=arr.lastIndexOf(elem) && result.indexOf(elem) == -1){ result.push(elem); } }); return result; }
方法六get
function duplicates(arr) { var a=arr.sort(),b=[]; for(var i in a){ if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); } return b; }//先排序,若是後一個與前一個相等且未保存,則保存。