摘要:第一種常規法最直觀的思路創建一個新數組如果新數組中已經包含了當前的第個元素,那么跳過否則把當前項到新數組中輸出這種方法用到了方法。特殊情況當數組中既有數字又有字符串的時候,如此時希望和都保留,那么上述的方法無法達到要求。
第一種:常規法(最直觀的思路)
function unique(arr){ var n = []; //創建一個新數組 for(var i = 0; i < arr.length; i++) { //如果新數組中已經包含了當前的第i個元素,那么跳過 if (n.indexOf(arr[i]) == -1) { //否則把當前項push到新數組中 n.push(arr[i]); } } return n; } var array = [4,2,4,6,1,2,4,7,8]; console.log(unique(array)); //輸出[4,2,6,1,7,8]
這種方法用到了indexOf方法。其目的是尋找參數在數組中第一次出現的位置。很顯然,js引擎在實現這個方法的時候會遍歷數組直到找到目標為止。所以此函數會浪費掉很多時間,效率并不高。
第二種:hash()表
function unique(arr){ var n = []; var hash = {}; for(var i = 0; i < arr.length; i++){ if (!hash[arr[i]]) { hash[arr[i]] = 1; n.push(arr[i]) } } return n; } var array = [4,2,4,6,1,2,4,7,8]; console.log(unique(array));//輸出[4,2,6,1,7,8]
當for循環遍歷數組時,每次取出一個元素與hash表中的對象進行對比,如果這個元素不重復,則把它存放到結果數組中,同時把這個元素的內容作為對象的一個屬性,并賦值為1,存入到hash表中。
第三種:先排序在比較相鄰元素
function unique(arr){ arr.sort(); var n = [arr[0]]; for(var i = 1; i < arr.length; i++){ if(arr[i] !== n[n.length-1]){ n.push(arr[i]); } } return n; } var array = [4,2,4,6,1,2,4,7,8]; console.log(unique(array)); //輸出[1,2,4,6,7,8]
排序的時候用的JS原生的sort方法,JS引擎內部用的快速排序。最終測試的結果是此方法運行時間比上面兩種都快了不少。
特殊情況:
當數組中既有數字又有字符串的時候,如:var arr = [4,2,4,6,1,"2",4,7,8],此時希望2和"2"都保留,那么上述的方法無法達到要求。
第四種:
function unique(arr){ var n = []; var hash = {}; for(var i = 0; i < arr.length; i++){ if (!hash[typeof(arr[i])+arr[i]]) { hash[typeof(arr[i])+arr[i]] = 1; n.push(arr[i]) } } return n; } var array = [4,2,4,6,1,"2",4,7,8]; console.log(unique(array));//輸出[4,2,6,1,"2",7,8]
在 JavaScript 里,對象的鍵值只能是字符串,因此需要 typeof(arr[i])+arr[i] 來區分數值 2 和字符串 "2" 的情況。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80261.html
摘要:注方法可以返回某個指定字符串在字符串中首次出現的位置比如首次出現的位置是數組中的第一個,即下標為遍歷數組使用標識符去重聲明一個變量標識排序后遍歷過濾數組思路先給數組排序,這樣相同的項總是相鄰。 假設我們有數組arr,并且聲明新數組hash用來存放去重后的元素: var arr = [23,44,5,2,23,5,1,7,8,7]; //包含重復元素 var hash= [];...
摘要:數組去重看了網上很多數組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。還有就是方法返回的數組也是排序后的數組,某些情況下可能不符合要求。 JS數組去重 看了網上很多數組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。部分內容參考該博客 1 . 在原數組上操作(基本方法) 思路:利用循環嵌套,判斷數組中每個元素與其后面的元素是否相等,如果相等,就使用spli...
閱讀 1519·2021-11-23 09:51
閱讀 3639·2021-09-26 09:46
閱讀 2125·2021-09-22 10:02
閱讀 1818·2019-08-30 15:56
閱讀 3319·2019-08-30 12:51
閱讀 2224·2019-08-30 11:12
閱讀 2060·2019-08-29 13:23
閱讀 2323·2019-08-29 13:16