javascript數組去重小結,javascript數組小結

來源:互聯網
上載者:User

javascript數組去重小結,javascript數組小結

前言

最近為了換工作,準備下面試,開始回顧複習JavaScript相關的知識,昨天下午想到了數組去重的相關方法,乾脆整理出幾篇JavaScript演算法文章,以備後用,此系列文章不定篇數,不定時間,想到哪寫到哪,不保證正確性,不保證高效率,只是談談個人理解,如有錯誤,請諸位斧正。

關於去重

數組去重是一個比較常見的演算法考察點,實現去重的方式無外乎通過唯一性和非唯一性。簡單來講就是挑出唯一的或者刪除不唯一的。以下所有演算法都是我自己瞎命名的,請無視之。

迴圈匹配去重

顧名思義,就是把數組中的每一個元素都和存放元素的數組對比,遇到不重複的元素,放入新數組中,直至迴圈結束,由於匹配也有迴圈,也可以稱為雙迴圈匹配去重,這也是大家都能想到的最簡單的方式。

實現代碼:

var arr=[1,3,4,56,3,7,9,7];var result=[];//匹配function isMatch(array,n){  for(var i=0;i<array.length;i++){    if(array[i]==n){      return true;    }  }  return false;};//驗證所有元素function unqiue(array){  for(var i=0;i<array.length;i++){    if(!isMatch(result,array[i])){      result.push(array[i]);    }  }  return result;};console.log(unqiue(arr));

注意:上面方法有一個bug,當存在數字和數字形式的字串的時候,沒有區分出數字和數字字串。因為在匹配函數isMatch()裡用的是雙等“==”,沒有驗證元素類型,實際應該使用全等“===”。
修改後的代碼如下:

var arr=[1,3,4,56,3,'1',7,9,7];var result=[];//匹配function isMatch(array,n){  for(var i=0;i<array.length;i++){    if(array[i]===n){      return true;    }  }  return false;};//驗證所有元素function unqiue(array){  for(var i=0;i<array.length;i++){    if(!isMatch(result,array[i])){      result.push(array[i]);    }  }  return result;};console.log(unqiue(arr));

演算法優缺點:

優點:

實現簡單,思路直觀

缺點:

效率低下

JSON去重/對象去重/字典去重

JSON去重,簡單來講就是利用Object對象key的唯一性,將數組的元素轉換為JSON或者說對象的key值。JSON的value儲存數組的索引index,然後對JSON對象進行for in迴圈,儲存到新數組中。

Array、JSON、{}都是Object,所以採用任意一種都可以實現此演算法。

實現代碼:

Array方式:

var arr=[1,3,4,56,3,'1',7,9,7];function unqiue(array){  var cache=[];  var result=[];   //將數組元素轉為對象的key  for(var i=0;i<array.length;i++){    cache[array[i]]=i;  };    //儲存key(實際的數組元素)  for(key in cache){    result.push(key);  };    return result;}  console.log(unqiue(arr));

JSON方式:

var arr=[1,3,4,56,3,'1',7,9,7];function unqiue(array){  var cache={};  var result=[];   //將數組元素轉為對象的key  for(var i=0;i<array.length;i++){    cache[array[i]]=i;  };    //儲存key(實際的數組元素)  for(key in cache){    result.push(key);  };    return result;}  console.log(unqiue(arr));

Object方式:

var arr=[1,3,4,56,3,'1',7,9,7];function unqiue(array){  var cache=new Object();  var result=[];   //將數組元素轉為對象的key  for(var i=0;i<array.length;i++){    cache[array[i]]=i;  };    //儲存key(實際的數組元素)  for(key in cache){    result.push(key);  };    return result;}  console.log(unqiue(arr));

演算法優缺點:

優點:

簡單

效率非常高

缺點:

1.改變了數組元素的類型()
2.有bug(無非區分數字和數字類型字串)

隊列遞迴去重

昨天晚上思忖良久想到用隊列的方式,先將數組排序成升序或降序的隊列,這樣相同的元素就處在一個地區內,然後從隊尾向前匹配,如果匹配成功,刪除隊尾,然後前一個元素再向其前面的匹配。整個匹配完成之後,剩下的元素就是去重過後的隊列。

var arr=[6, 4, 6, 9, '6', 13, 56, 9, ,'11',1, 8, '7', 17, 5, 45, 3, 7];function unqiue(array){  //排序數組,形成隊列  array.sort(function(m,n){return m-n;});  ////排序後,隊尾向前對比,如果相同,刪除隊尾,依次類推  function loop(Index){    if(Index>=1){      if(array[Index]===array[Index-1]){        arr.splice(Index,1);      }      loop(Index-1);    }      }  loop(array.length-1);  return array;}console.log(unqiue(arr));

演算法優缺點:

優點:

效率較高

缺點:

效率不是最高

INDEXOF去重方式

判斷瀏覽器是否支援indexOf ,indexOf 為ecmaScript5新方法 IE8以下(包括IE8, IE8隻支援部分ecma5)不支援

if (!Array.prototype.indexOf){ // 新增indexOf方法 Array.prototype.indexOf = function(item){ var result = -1, a_item = null; if (this.length == 0){ return result; } for(var i = 0, len = this.length; i < len; i++){ a_item = this[i]; if (a_item === item){ result = i; break; } } return result; } } 

您可能感興趣的文章:
  • 詳解javascript數組去重問題
  • JavaScript數組去重的五種方法
  • JavaScript數組去重的3種方法和代碼執行個體
  • js數組去重的三種常用方法總結
  • js實現數組去重、判斷數組以及對象中的內容是否相同
  • js演算法中的排序、數組去重詳細概述
  • js取兩個數組的交集|差集|並集|補集|去重範例程式碼
  • javascript數組去重3種方法的效能測試與比較
  • 兩個數組去重的JS代碼
  • 詳解JavaScript數組和字串中去除重複值的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.