成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript數(shù)組去重的6種算法

Panda / 1258人閱讀

摘要:否則存入結(jié)果數(shù)組。否則存入結(jié)果數(shù)組排序后相鄰去除法雖然原生數(shù)組的方法排序結(jié)果不怎么靠譜,但在不注重順序的去重里該缺點(diǎn)毫無影響。實(shí)現(xiàn)思路給傳入數(shù)組排序,排序后相同值相鄰,然后遍歷時(shí)新數(shù)組只加入不與前一值重復(fù)的值。

1.遍歷數(shù)組法

實(shí)現(xiàn)思路:新建一新數(shù)組,遍歷傳入數(shù)組,值不在新數(shù)組就加入該新數(shù)組中;注意點(diǎn):判斷值是否在數(shù)組的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多寫一些兼容低版本瀏覽器代碼

var arr = [1,3,5,7,9,1,9,5,9,3,5,11,13]; function unique1(array){ var newArr=[];//新建一個(gè)新數(shù)組 //遍歷參數(shù)數(shù)組array for(var i=0;i
2.對象鍵值對法

該方法執(zhí)行的速度比其他任何方法都快, 就是占用的內(nèi)存大一些,實(shí)現(xiàn)思路:新建一js對象以及新數(shù)組,遍歷傳入數(shù)組時(shí),判斷值是否為js對象的鍵,不是的話給對象新增該鍵并放入新數(shù)組。注意 點(diǎn): 判斷是否為js對象鍵時(shí),會(huì)自動(dòng)對傳入的鍵執(zhí)行“toString()”,不同的鍵可能會(huì)被誤認(rèn)為一樣;例如: a[1]、a["1"] 。解決上述問題還是得調(diào)“indexOf”。

var arr = [1,3,5,7,9,1,9,5,9,3,5,11,13]; // 速度最快, 占空間最多(空間換時(shí)間) function unique2(array){ var json={},newArr=[],val,type; for(var i=0;i
3.數(shù)組下標(biāo)判斷法

還是得調(diào)用“indexOf”性能跟方法1差不多,實(shí)現(xiàn)思路:如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i,那么表示第i項(xiàng)是重復(fù)的,忽略掉。否則存入結(jié)果數(shù)組。

var arr = [1,3,5,7,9,1,3,5]; ? ? ? ?function unique3(array){ var n = [array[0]]; //結(jié)果數(shù)組 //從第二項(xiàng)開始遍歷 for(var i = 1; i < array.length; i++) { //如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i, //那么表示第i項(xiàng)是重復(fù)的,忽略掉。否則存入結(jié)果數(shù)組 if (array.indexOf(array[i]) == i) n.push(array[i]); } return n; } console.log(unique3(arr));
4.排序后相鄰去除法

雖然原生數(shù)組的”sort”方法排序結(jié)果不怎么靠譜,但在不注重順序的去重里該缺點(diǎn)毫無影響。實(shí)現(xiàn)思路:給傳入數(shù)組排序,排序后相同值相鄰,然后遍歷時(shí)新數(shù)組只加入不與前一值重復(fù)的值。

var arr = [1,3,5,7,9,1,3,5]; function unique4(array){ array.sort(); var re=[array[0]]; for(var i = 1; i < array.length; i++){ if( array[i] !== re[re.length-1]){ ?re.push(array[i]); } } return re; } ? ? ? console.log(unique4(arr));
5.優(yōu)化遍歷數(shù)組法

該方法的實(shí)現(xiàn)代碼相當(dāng)酷炫,實(shí)現(xiàn)思路:獲取沒重復(fù)的最右一值放入新數(shù)組

var arr = [1,3,5,7,9,1,3,5]; function unique5(array){ var r = []; for(var i = 0, l = array.length; i < l; i++) { for(var j = i + 1; j < l; j++) if (array[i] === array[j]) j = ++i; r.push(array[i]); } return r; } console.log(unique5(arr));
6.通過hash表

hash是一個(gè)對象,則存在鍵值對(key:value),只不過現(xiàn)在是為空的,所以hash[key] = value;
1:i=0;this[i]=this[0]=1; hash[this[0]] = hash[1] , 因?yàn)閔ash初始為空,沒有找到key=1的值,所以然后undefined,
2:hash[1] = true(此時(shí)hash對象就有了第一組鍵值對),將原數(shù)組的第一個(gè)數(shù)添加到新數(shù)組中,重復(fù)第一步
3:因?yàn)椴恢貜?fù)的判斷hash的值都是undefined,而重復(fù)的都為true了,所以不重復(fù)都被添加到新數(shù)組中
4: 因?yàn)閔ash表存的值是存的地址,放在堆內(nèi)存中,所以有多少個(gè)不重復(fù)的元素,就要分多少個(gè)內(nèi)存來存放,所以這種方法比較占內(nèi)存,但是相比之下,這種的運(yùn)算運(yùn)動(dòng)是最快的,
5 :這也就是用空間來換取時(shí)間了,數(shù)據(jù)量比較小,

var arr = [1,"b","b",4,3,3,4,5,1]; Array.prototype.unique2 = function(){ ? ? ?var hash = {}; //定義一個(gè)hash表 ? ? ?var arr1 = []; //定義一個(gè)新數(shù)組 ? ? ?for(var i=0;i

以上就是JavaScript數(shù)組去重的六種算法

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92466.html

相關(guān)文章

  • javascript 數(shù)組重的6思路

    摘要:但是這并不妨礙我們從思維拓展的角度出發(fā),看看去重可以用幾種思路去實(shí)現(xiàn)。首先是常規(guī)的雙層循環(huán)比對的思路實(shí)現(xiàn)定義一個(gè)變量表示當(dāng)前元素在中是否存在。依次對中的元素和原數(shù)組元素進(jìn)行比對。重點(diǎn)是保證碰撞的幾率小到比中大獎(jiǎng)還小就可以了。 前端在日常開發(fā)中或多或少都會(huì)碰到有對數(shù)據(jù)去重的需求,實(shí)際上,像是lodash這些工具庫已經(jīng)有成熟完備的實(shí)現(xiàn),并且可以成熟地運(yùn)用于生產(chǎn)環(huán)境。但是這并不妨礙我們從思維...

    AlphaWallet 評論0 收藏0
  • 數(shù)組重的正確編寫姿勢

    摘要:引言數(shù)組去重是前端面試的一個(gè)必備題目,其具體表現(xiàn)內(nèi)容為怎樣去掉的的重復(fù)項(xiàng)。一般姿勢使用數(shù)組的方法可以很簡單的達(dá)到目的。所以這算是委曲求全的一種中庸姿勢。改編自劉春龍博客中的文章中數(shù)組去重問題 引言 數(shù)組去重是前端面試的一個(gè)必備題目,其具體表現(xiàn)內(nèi)容為:怎樣去掉Javascript的Array的重復(fù)項(xiàng)。問題簡單直接,咱們也廢話不多說,直入主題吧。 一般姿勢 使用數(shù)組的indexOf()方法...

    G9YH 評論0 收藏0
  • JavaScript數(shù)組去重(12方法,史上最全)

    摘要:數(shù)組去重,一般都是在面試的時(shí)候才會(huì)碰到,一般是要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些你能答出其中的種,面試官很有可能對你刮目相看。數(shù)組去重的方法一利用去重中最常用不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般都是在面試的時(shí)候才會(huì)碰到,一般是要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看...

    rozbo 評論0 收藏0
  • JavaScript專題之數(shù)組去重

    摘要:專題系列第三篇,講解各種數(shù)組去重方法,并且跟著寫一個(gè)前言數(shù)組去重方法老生常談,既然是常談,我也來談?wù)?。它類似于?shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。 JavaScript 專題系列第三篇,講解各種數(shù)組去重方法,并且跟著 underscore 寫一個(gè) unique API 前言 數(shù)組去重方法老生常談,既然是常談,我也來談?wù)劇?雙層循環(huán) 也許我們首先想到的是使用 indexOf 來循...

    fsmStudy 評論0 收藏0
  • JavaScript數(shù)組方法之數(shù)組去重方法

    摘要:工作過程中經(jīng)常會(huì)用到數(shù)組去重,用到的時(shí)候往往一時(shí)想不到好方法,所以這里來總結(jié)一下去重方法。和方法分別為添加成員方法和得到鍵值方法。因此,利用方法也可以實(shí)現(xiàn)數(shù)組的去重。 工作過程中經(jīng)常會(huì)用到數(shù)組去重,用到的時(shí)候往往一時(shí)想不到好方法,所以這里來總結(jié)一下去重方法。使用es6去重代碼很簡單,而且ES6已經(jīng)相當(dāng)普及了。所以先來介紹一下es6中的方法。 1.ES6中Map結(jié)構(gòu)方法 function...

    CarlBenjamin 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<