JavaScript常見的五種數(shù)組去重的方式
大致介紹
JavaScript的數(shù)組去重問題在許多面試中都會遇到,現(xiàn)在做個總結(jié)
先來建立一個數(shù)組
var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN];
第一種
思路:建立一個臨時數(shù)組,用for循環(huán)去依次判斷arr中的每個項在臨時數(shù)組中是否有相同的值,如果沒有則將這個值添加到臨時數(shù)組,如果有相同的值則不添加,最后返回這個臨時數(shù)組
代碼:
Array.prototype.removeDuplicate = function(){ var n = []; for(var i=0;i<this.length;i++){ if(n.indexOf(this[i]) == -1 ){ n.push(this[i]); } } return n; } var m = arr.removeDuplicate(); console.log(m);//[1, 2, 3, "我", 34, "我的", NaN, NaN]
注意:不會去掉重復的NaN值
第二種
思路:建立一個臨時數(shù)組,用for循環(huán)利用indexOf()方法去依次判斷arr中的每個項在arr中第一次出現(xiàn)的位置,如果這個項在arr中第一次出現(xiàn)的位置就是它的位置,表明在它之前沒有相同的值則把它添加到臨時數(shù)組中,如果這個項在arr中第一次出現(xiàn)的位置不是他的位置則表明在它之前有相同的值,則不把他添加到臨時數(shù)組中;最后返回臨時數(shù)組
代碼:
Array.prototype.removeDuplicate = function(){ var n = []; for(var i=0;i<this.length-1;i++){ if(this.indexOf(this[i]) == i){ n.push(this[i]); } } return n; } var m = arr.removeDuplicate(); console.log(m);//[1, 2, 3, "我", 34, "我的"]
注意:會把NaN值刪除
第三種
思路:建立一個臨時對象,利用for循環(huán)檢測這個臨時對象有沒有arr[i]這個屬性,如果沒有這個屬性表明arr[i]在它之前沒有和它重復的值。把臨時對象的arr[i]屬性設(shè)置為true,表明有這個屬性并把這個項添加到臨時數(shù)組中;最后返回臨時數(shù)組
代碼:
Array.prototype.removeDuplicate = function(){ var n = [],m = {}; for(var i=0;i<this.length;i++){ if(!m[this[i]]){ m[this[i]] = true; n.push(this[i]); } } return n; } var m = arr.removeDuplicate(); console.log(m);//[1, 2, 3, "我", 34, "我的", NaN]
第四種
思路:先將這個數(shù)組排序,然后比較每個項和它后面的項的值是否相等,如果不相等則添加到臨時數(shù)組中;最后返回臨時數(shù)組
代碼:
Array.prototype.removeDuplicate = function(){ var n = []; this.sort(); for(var i=0;i<this.length;i++){ if(this[i] != this[i+1]){ n.push(this[i]); } } return n; } var m = arr.removeDuplicate(); console.log(m);//[1, 2, 3, 34, NaN, NaN, "我", "我的"]
注意:不會去掉重復的NaN值
第五種
思路:利用ES6的方法set方法去重,并用Array.from轉(zhuǎn)換為數(shù)組
set是一種新的數(shù)據(jù)結(jié)構(gòu),它可以接收一個數(shù)組或者是類數(shù)組對象,自動去重其中的重復項目,返回一個對象
代碼:
Array.prototype.removeDuplicate = function(){ return (Array.from(new Set(this))); } var m = arr.removeDuplicate(); console.log(m);//[1, 2, 3, "我", 34, "我的", NaN]
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
JavaScript使用Promise實現(xiàn)分批處理接口請求
當我們在實際項目中遇到需要批量發(fā)起上百條接口請求怎么辦呢,本文就來為大家介紹一下JavaScript如何使用Promise實現(xiàn)分批處理接口請求,需要的小伙伴可以參考一下2023-11-11JS實現(xiàn)1000以內(nèi)被3或5整除的數(shù)字之和
今天在技術(shù)群里看到一道這樣的提:求1000以內(nèi)被3或5整除的數(shù)字之和。小編把我的解決辦法分享到腳本之家平臺,供大家參考2016-02-02- 什么是函數(shù)式編程?根據(jù)百度百科的描述,“函數(shù)式編程是種編程典范,它將電腦運算視為函數(shù)的計算。函數(shù)編程語言最重要的基礎(chǔ)是 λ 演算(lambda calculus)。而且λ演算的函數(shù)可以接受函數(shù)當作輸入(參數(shù))和輸出(返回值)?!?/div> 2015-10-10
最新評論