JS數組去掉重復元素,這里提供3中寫法。
var arr =[1,2,3,4,5,6,3,4,7,2,4,1,8];
輸出:[1,2,3,4,5,6,7,8];
1.使用indexOf()
arr.indexOf(a,b)這個方法是查找a在arr中首次出現的位置(b這個參數規定了在arr中開始檢索的位置,可寫可不寫,不寫的話檢索位置為0).
利用這個方法來判斷新數組中是否出現過這個元素,如果新數組中沒有這個元素,那么把元素添加到新數組中,如果新數組中已經有這個元素了那就不進行操作,遍歷之后得到的新數組即為所求。
1 <script> 2 var arr = [1,2,3,4,5,6,3,4,7,2,4,1,8];//原數組 3 var newArr = [];//定義一個新數組來接收元素 4 5 for(var i = 0;i<arr.length;i++){ 6 //判斷newArr中是否有arr[i]這個元素,如果返回結果為-1(<0)證明新數組newArr中沒有這個元素,則把元素添加到新數組中 7 if(newArr.indexOf(arr[i])<0){ 8 newArr.push(arr[i]); 9 } 10 } 11 12 console.log(newArr); 13 14 </script>
2.不添加新數組的比較
將數組中前一個元素與后面剩下的元素依次進行比較,如果發現兩個元素相同,則刪除后面的元素。
這里會用到arr.splice(index,n);這個方法是刪除數組中的某個元素,刪除下標為index的元素,刪除n位
<script> var arr = [1,2,3,4,5,6,3,4,7,2,4,1,8]; for(var i = 0;i<arr.length-1;i++){//遍歷獲取“前一個元素”,最后一個數不用獲取,它本身已經被前面所有元素給排除過了 for(var j = i+1;j<arr.length;j++){//遍歷獲取剩下的元素,“后一個元素”的起始索引就是“前一個元素”的索引+1 if(arr[i] == arr[j]){//如果“前一個元素”與后面剩下的元素之一相同,那么就要刪除后面的這個元素 arr.splice(j,1); j--;//如果刪除了這個元素,那么后面的元素索引值就會發生改變,所以這里的j需要-1 } } } console.log(arr); </script>
3.使用空對象比較
這個方法相對來說比較麻煩,是我前幾天學習對象的時候寫的方法,主要就是利用對象的屬性和屬性值來判斷這個對象中是否存在這個屬性,如果存在這個屬性那么就把這個元素在數組中刪除當中。
把數組的元素給對象當成屬性,對象中沒有這個屬性,那么就添加這個屬性並給屬性一個屬性值,如果這個對象中有這個屬性那么就刪除這個數組的元素。
<script> var obj = {}; for(var i = 0;i<arr.length;i++){ var o = arr[i];//將數組中的元素給對象 if(obj[o] == undefined){//obj[o]取對象中屬性為o的屬性,如果沒有這個屬性則會返回undefined //可以判斷obj這個對象中有沒有這個屬性 obj[o] = 1; }else{ arr.splice(i,1); } } console.log(arr); </script>