最近在想着換工作,去了一家中關村的上市公司,面試官隨便問了幾個問題其中就提到了怎么刪除數組元素的方法,表示這已經是第三次遇到了這個問題了,由於知識口頭說說所以就隨便說了下,之前用的時候都是直接找的方法庫雖然知道大致是怎么寫的但是還沒有真正寫過,網上的方法還是蠻多的這里也給大家分享一個作者寫的吧,希望對初學者有所幫助:
//數組去重的方法 Array.prototype.unique=function(){ //集中聲明變量 var oldArr=this, newArr=[oldArr[0]], len=oldArr.length, i=1; //過濾空數組 if(!len) return this; //過濾重復元素 for(;i<len;i++){ newArr.indexOf(oldArr[i])<0 ? newArr.push(_this) : ''; } //返回過濾后的數組沒有影響原數組 return newArr; } var arr=['a','a','b','a','c','d']; console.log(arr.unique());//["a", "b", "c", "d", unique: function]
雖然網上也有很多而且自己寫的也不咋地,但是畢竟自己寫的邏輯清楚以后還可以順着邏輯擴展比如擴展到對象元素去重或者是可以同時操作多個數組等等這里再放上別人的寫的幾個方法可以綜合比較下
方法1:
function oSort(arr) { var result ={}; var newArr=[]; for(var i=0;i { if(!result[arr[i]]) { newArr.push(arr[i]) result[arr[i]]=1 } } return newArr }
原文出處:http://blog.sina.com.cn/s/blog_77a4568a0101d4lq.html
方法2:
遍歷要刪除的數組arr, 把元素分別放入另一個數組tmp中,在判斷該元素在arr中不存在才允許放入tmp中
用到兩個函數:for ...in 和 indexOf()
var student = ['qiang','ming','tao','li','liang','you','qiang','tao']; function unique(arr){ // 遍歷arr,把元素分別放入tmp數組(不存在才放) var tmp = new Array(); for(var i in arr){ //該元素在tmp內部不存在才允許追加 if(tmp.indexOf(arr[i])==-1){ } } return tmp; }
方法3:
把目標數組arr的元素值和鍵的位置調換 自動就把重復的元素給刪除掉了,調換后的樣子:array('qiang'=>1,'ming'=>1,'tao'=>1)
<script type="text/javascript"> var student = ['qiang','ming','tao','li','liang','you','qiang','tao']; function unique(arr){ var tmp = new Array(); for(var m in arr){ tmp[arr[m]]=1; } //再把鍵和值的位置再次調換 var tmparr = new Array(); for(var n in tmp){ tmparr.push(n); } return tmparr; } </script>
方法4
/** * 去除數組重復元素 */ function uniqueArray(data){ data = data || []; var a = {}; for (var i=0; i<data.length; i++) { var v = data[i]; if (typeof(a[v]) == 'undefined'){ a[v] = 1; } }; data.length=0; for (var i in a){ data[data.length] = i; } return data; }
方法都差不多第三個方法想法還是蠻高明的~