国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS判斷數(shù)組重復(fù)

王軍 / 311人閱讀

摘要:背景項(xiàng)目需要前端判斷已建列表是否存在重復(fù)的數(shù)據(jù),經(jīng)過校驗(yàn)后再進(jìn)行下一步。整體思路是將數(shù)組中的數(shù)據(jù)放入中,然后比較和原數(shù)組的長度,如果不一致,那么說明存在重復(fù)的數(shù)據(jù)。

背景

項(xiàng)目需要前端判斷已建列表是否存在重復(fù)的數(shù)據(jù),經(jīng)過校驗(yàn)后再進(jìn)行下一步。以下為逐步改良的過程,雖然整個(gè)過程并不復(fù)雜而且沒什么技術(shù)含量,還是記錄一下以便他人。

最單純的方法

最單純的方法當(dāng)然是直接兩層for循環(huán)判斷,但是如果當(dāng)數(shù)據(jù)量大的時(shí)候,計(jì)算量也將指數(shù)上漲,所以非常不好,果斷拋棄。

排序后查重

這種思路主要是拿到數(shù)據(jù)之后先封裝到數(shù)組中,然后對數(shù)組進(jìn)行一次排序,然后從頭到尾遍歷看自己的后一個(gè)是否相同即可,如果相同,直接返回。這種方法多出了一次對實(shí)際業(yè)務(wù)沒有用處的排序操作,也有些缺陷。

利用Set的特性

Set的特性是不重復(fù),所以思考可以利用這一點(diǎn)進(jìn)行比對。整體思路是將數(shù)組中的數(shù)據(jù)放入Set中,然后比較Set和原數(shù)組的長度,如果不一致,那么說明存在重復(fù)的數(shù)據(jù)。
代碼如下:

var sourceArray = [1,2,3,4,5];
var tempSet = new Set();

for(i = 0;i

就在我美滋滋的已經(jīng)把算法實(shí)現(xiàn)到我們項(xiàng)目的時(shí)候,前端的妹子告訴我Set的兼容性存在問題,所以不得不拋棄了這個(gè)想法,進(jìn)入了下一步的優(yōu)化。

位圖的思想

這個(gè)標(biāo)題是我根據(jù)位圖排序的思想起的名字,(位圖排序是一種很好玩的排序思路,有興趣可以百度)。這種優(yōu)化的主要思路是設(shè)置了一個(gè)標(biāo)志位的數(shù)組,如果存在則對應(yīng)位置為true。如果某一個(gè)數(shù)據(jù)發(fā)現(xiàn)自己的位置已經(jīng)是true了,那么說明存在重復(fù)的數(shù)據(jù)了。
代碼如下:

var sourceArray = [1,2,3,4,5,4,5];
var flagArray = new Array();

for(i = 0;i
思路的發(fā)展

開始動(dòng)手的時(shí)候已經(jīng)知道兩層循環(huán)是不行的,所以一定不會(huì)采取這種方式,然后想到的是是否已經(jīng)存在重復(fù)的輪子,也就是說,有沒有函數(shù)能直接判斷重復(fù),查了一下好像沒有,于是想到了Set這個(gè)數(shù)據(jù)結(jié)構(gòu)的特性,往這個(gè)上面靠,所以誕生了第三種方案,但是后來又發(fā)現(xiàn)兼容性問題,所以最終采用了第四種方案。
整體的思路就是這樣,或許知道了某一種優(yōu)化可以牢記于心,以后直接用,但是如果掌握了優(yōu)化的思路,就可以面對各種場景思考方案,更活而不是死記。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/84728.html

相關(guān)文章

  • JS數(shù)組專題2?? ? 數(shù)組去重

    距離上次發(fā)文,已經(jīng)有一段時(shí)間了,最近工作比較忙,這不眼看快雙十一了,就相當(dāng)于給大家一些福利吧! showImg(https://segmentfault.com/img/remote/1460000016538082?w=250&h=250); 一、什么是數(shù)組去重 簡單說就是把數(shù)組中重復(fù)的項(xiàng)刪除掉,你 GET 到了嗎 ?下面我將簡單介紹下幾種基本的方法及其優(yōu)缺點(diǎn)。 二、方法匯總 兩層循環(huán) 無相同...

    tunny 評論0 收藏0
  • JS數(shù)組扁平化去并除其中重復(fù)部分?jǐn)?shù)據(jù),最終得到一個(gè)升序且不重復(fù)數(shù)組

    摘要:題目已知如下數(shù)組編寫一個(gè)程序?qū)?shù)組扁平化去并除其中重復(fù)部分?jǐn)?shù)據(jù),最終得到一個(gè)升序且不重復(fù)的數(shù)組實(shí)現(xiàn)數(shù)組扁平化去重排序解析數(shù)組扁平化判斷數(shù)組子元素是否為數(shù)組是的話進(jìn)行遞歸否則把子元素變?yōu)閿?shù)組的執(zhí)行結(jié)果為的執(zhí)行結(jié)果為數(shù)組去重通過實(shí)現(xiàn) 題目: 已知如下數(shù)組:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, ...

    godruoyi 評論0 收藏0
  • 嘮叨一下js對象與哈希表那些事

    摘要:的擴(kuò)展知識對于哈希表來說,最重要的莫過于生成哈希串的哈希算法和處理沖突的策略了。由于鏈表的查找需要遍歷,如果我們將鏈表換成樹或者哈希表結(jié)構(gòu),那么就能大幅提高沖突元素的查找效率。 最近在整理數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的知識,小茄專門在github上開了個(gè)repo https://github.com/qieguo2016...,后續(xù)內(nèi)容也會(huì)更新到這里,歡迎圍觀加星星! js對象 js中的對象是基...

    Nosee 評論0 收藏0
  • es6 Set和WeakSet

    摘要:返回一個(gè)布爾值,表示該值是否為的成員。清除所有成員,沒有返回值。上面代碼中,方法返回的遍歷器,同時(shí)包括鍵名和鍵值,所以每次輸出一個(gè)數(shù)組,它的兩個(gè)成員完全相等。因此,適合臨時(shí)存放一組對象,以及存放跟對象綁定的信息。 Js大部分歷史時(shí)期都只存在一種集合類型,也就是數(shù)組類型。數(shù)組在 JS 中的使用正如其他語言的數(shù)組一樣,但缺少更多類型的集合導(dǎo)致數(shù)組也經(jīng)常被當(dāng)作隊(duì)列與棧來使用。數(shù)組只使用了數(shù)值...

    marser 評論0 收藏0

發(fā)表評論

0條評論

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