四種方法都需要藉助一個臨時數組,並最終返回這個臨時數組。
(一)使用方法indexOf判斷當前元素是否已經存在於臨時數組中,如果不存在(結果返回-1),則push到臨時數組中。
function removeDuplicatedItem1(arr){ var retArr=[]; for(var i=0;i<arr.length;i++){ if(retArr.indexOf(arr[i])===-1){//===判斷值與類型是否完全相等,若類型不同也算不同的元素 retArr.push(arr[i]); } } return retArr; }
(二)利用對象屬性的唯一性,把數組元素作為臨時建立的一個對象的屬性,若不存在則push
function removeDuplicatedItem2(arr){ var temp={};//建立的一個臨時對象,用於儲存數組元素作為其屬性 var retArr=[]; for(var i=0;i<arr.length;i++){ if(!temp[arr[i]]){//判斷屬性是否存在,當然也可以判斷當前屬性是否等於1 temp[arr[i]]=1;//給當前屬性值賦值,避免為空白 retArr.push(arr[i]); } } return retArr; }
(三) 使用forEach和indexOf相結合,判斷當前元素的下標值與indexOf返回的結果是否一致,若一致說明當前元素是第一次出現,則push到臨時數組中
function removeDuplicatedItem3(arr){ var retArr=[]; arr.forEach(function(item,i,ar){ if(arr.indexOf(item)==i){//判斷當前元素是否是第一次出現 retArr.push(item); } }); return retArr; }
(四)先對原數組排序,可以使用sort,因為只是讓相同的元素聚集到一起,對於定序沒有要求。用一個臨時變數temp儲存當前剛push進臨時數組的item,數組指標後移,如果此時指標所指的item與temp不相等,則push到臨時數組中,否則,指標接著後移,直到原數組結束。
function removeDuplicatedItem4(arr){ if(arr.length<=0){//提前判斷數組中是否有元素,防止數組越界 return -1; } var retArr=[]; arr.sort(); var nowItem=arr[0];//初始值儲存原數組中的第一個元素 retArr.push(nowItem); for(var i=1;i<arr.length;i++){ if(arr[i]!=nowItem){ retArr.push(arr[i]); nowItem=arr[i];//改變nowItem的值 } } return retArr; }
參考資料:http://www.cnblogs.com/leonwang/p/4845576.html