工作中遇到的一個問題,就是去除數組中重復的元素,記錄一下幾種有效的方法:
第一種思路:遍歷要刪除的數組arr, 把元素分別放入另一個數組tmp中,在判斷該元素在arr中不存在才允許放入tmp中。
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>去除數組重復項</title> </head> <body><script type="text/javascript"> var color = ['red','blue','green','pink','yellow','blue','black','red'];function unique(arr){// 遍歷arr,把元素分別放入tmp數組(不存在才放)var tmp = new Array();for(var i in arr){//該元素在tmp內部不存在才允許追加if(tmp.indexOf(arr[i])==-1){tmp.push(arr[i]);}}return tmp;}var arr = unique(color);console.log(arr); </script> </body> </html>
第二種思路是:把目標數組arr的元素值和鍵的位置調換 自動就把重復的元素給刪除掉了,調換后的樣子:array('red'=>1,'blue'=>1,'green'=>1,'pink'=>1,'yellow'=>1,'black'=>1)
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>去除數組重復項</title> </head> <body><script type="text/javascript">var color = ['red','blue','green','pink','yellow','blue','black','red'];function unique(arr){var tmp = new Array();for(var m in arr){tmp[arr[m]]=1;}//再把鍵和值的位置再次調換 console.log(tmp);var tmparr = new Array();for(var n in tmp){tmparr.push(n);}return tmparr;}var arr = unique(color);console.log(arr);</script> </body> </html>
第三種思路:我們可以 用一個hashtable的結構記錄已有的元素,這樣就可以避免內層循環。
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>去除數組重復項</title> </head> <body><script type="text/javascript">var color = ['red','blue','green','pink','yellow','blue','black','red'];function unique(arr) {var result = [], hash = {};for (var i = 0, elem; (elem = arr[i]) != null; i++) {if (!hash[elem]) {result.push(elem);hash[elem] = true;}}return result;}var arr = unique(color);console.log(arr);</script> </body> </html>
?