JavaScript tips:數組去重

來源:互聯網
上載者:User

標籤:function   遍曆數組   []   length   log   相等   rip   索引   否則   

1、實現目標:數組去重

2、實現思路:

(1)建立新數組。

(2)遍曆原數組,判斷當前被遍曆元素是否存在於新數組,如果存在於新數組,則判斷當前被遍曆元素是重複的;如果不存在於新數組,則判斷當前被遍曆元素不是重複的,則將其壓入新數組。

(3)遍曆完畢原數組後,返回新數組。

3、具體實現:根據對當前元素是否重複的判斷方法不同,有四種不同的具體實現。

(1)利用hash表儲存被遍曆元素是否重複的狀態。

 1 function unique( arr ) { 2   var n = {}, //hash表,用於判斷元素是否已經壓入新數組 3       r = [];  4   for (var i = 0, length = arr.length; i < length; i++) { 5     // 如果當前元素已經被壓入新數組,hash表中的值則為true,據此判斷其是否重複 6     if ( !n[ arr[i] ] ) { 7       n[ arr[i] ] = true; 8       r.push( arr[i] ); 9     };10   };11   return r;12 };

(2)利用indexOf方法,判斷當前被遍曆元素是否在新數組中。

1 function unique( arr ) {2   var n = [];3   for (var i = 0, length = arr.length; i < length; i++) {4     if ( n.indexOf( arr[i] ) === -1 ) {5       n.push( arr[i] );6     };7   }8   return n;9 };

(3)利用當前被遍曆元素在原數組第一次出現的位置與其索引是否相等判斷是否重複。

 1 function unique( arr ) { 2   var n = []; 3   for (var i = 0, length = arr.length; i < length; i++) { 4     //如果當前數組的第i項在當前數組中第一次出現的位置不是i,那麼表示第i項是重複的,忽略掉。否則存入新數組 5     if ( arr.indexOf( arr[i] ) === i ) { 6       n.push( arr[i] ); 7     }; 8   }; 9   return n;10 };

(4)利用當前被遍曆元素在原數組中第一次出現的位置和最後出現的位置是否相同判斷是否重複。

 1 function unique( arr ) { 2   var n = []; 3   for (var i = 0, length = arr.length; i < length; i++) { 4     //如果當前數組的第i項在當前數組中第一次出現的位置和最後一次出現的位置是否相等 5     if ( arr.indexOf( arr[i] ) === arr.lastIndexOf( arr[i] ) ) { 6       n.push( arr[i] ); 7     }; 8   }; 9   return n;10 }

 

(5)利用數組的排序方法,先排序,利用排序後的數組特性,亦即相同值的元素相鄰,來判斷是否重複。

 1 function unique( arr ) { 2   arr.sort(); 3   var r = []; 4   for (var i = 1, length = arr.length; i < length; i++) { 5     if ( arr[i] !== arr[i - 1] ) { 6       r.push( arr[i] ); 7     }; 8   }; 9   return r;10 };

4、小結:

(1)基於數組位置:

第二種,從當前元素是否出現在新數組中判斷是否重複;

第三種,根據當前元素第一次出現的位置和當前被遍曆元素下標是否相等判斷是否重複;

第四種,根據當前元素第一次出現的位置和最後一次出現的位置判斷是否重複;

(2)基於數組分布:

第一種,建hash表,儲存數組元素的分布狀態,遍曆數組時,根據分布狀態判斷是否重複;

(3)基於數組排序:

第五種,先對數組排序,利用排序後,相同值數組元素相鄰的特性,判斷元素是否重複。

JavaScript tips:數組去重

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.