JavaScript數(shù)組去重算法實(shí)例小結(jié)
本文實(shí)例總結(jié)了JavaScript數(shù)組去重算法。分享給大家供大家參考,具體如下:
測(cè)試用例:
arr = ["1",3,"1",1,4,5,1,"2",5,1,{"name":"li","age":20},2,4,3,{"name":"li","age":20},""];
方法一:借助于臨時(shí)數(shù)組與indexOf , 算法復(fù)雜度為:O(n^2)
function unique1(arr){ var temp = []; for(var i=0; i<arr.length; i++){ if(temp.indexOf(arr[i]) == -1){ temp.push(arr[i]); } } return temp; }
測(cè)試結(jié)果:
unique1(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, Object { name="li", age=20}, ""]
bug 無(wú)法區(qū)分對(duì)象
方法二 : 用JavaScript中的Object對(duì)象來(lái)當(dāng)作哈希表
function unique2(arr){ var temp=[]; var hash={}; for(var i=0; i<arr.length;i++){ if(!hash[arr[i]]){ hash[arr[i]]=true; temp.push(arr[i]); } } return temp; }
測(cè)試結(jié)果:
unique2(arr) : ["1", 3, 4, 5, "2", Object { name="li", age=20}, ""]
bug : 無(wú)法區(qū)分: 1 和 "1"
修改
function unique2(arr){ var temp=[]; var hash={}; for(var i=0; i<arr.length;i++){ var item = arr[i]; var key = typeof(item)+item; if(!hash[key]){ hash[key]=true; temp.push(arr[i]); } } return temp; }
測(cè)試結(jié)果:
unique2(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, ""]
方法三:先用sort對(duì)數(shù)組排序,然后借助臨時(shí)數(shù)組,存儲(chǔ)相同元素的最后一個(gè),該方法只能用于純Number類型數(shù)組
function unique3(arr){ arr.sort(function(a,b){ return a-b; }); var temp = []; for(var i=0;i<arr.length;i++){ if(arr[i] !== arr[i+1]){ temp.push(arr[i]); } } return temp; }
PS:這里再為大家提供幾款相關(guān)工具供大家參考使用:
在線去除重復(fù)項(xiàng)工具:
http://tools.jb51.net/code/quchong
在線文本去重復(fù)工具:
http://tools.jb51.net/aideddesign/txt_quchong
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript字符與字符串操作技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JS隨機(jī)洗牌算法之?dāng)?shù)組隨機(jī)排序
- js算法中的排序、數(shù)組去重詳細(xì)概述
- JavaScript實(shí)現(xiàn)數(shù)組全排列、去重及求最大值算法示例
- JS數(shù)組操作中的經(jīng)典算法實(shí)例講解
- JS基于遞歸算法實(shí)現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法
- JavaScript隨機(jī)打亂數(shù)組順序之隨機(jī)洗牌算法
- js數(shù)組去重的5種算法實(shí)現(xiàn)
- JavaScript實(shí)現(xiàn)獲取兩個(gè)排序數(shù)組的中位數(shù)算法示例
相關(guān)文章
javascript實(shí)例--教你實(shí)現(xiàn)撲克牌洗牌功能
我們一般都會(huì)按照順序把隨機(jī)摸過(guò)來(lái)的牌從小到大的順序在手上理整齊(記得小時(shí)候打牌兩副牌手都抓不過(guò)來(lái)),這篇隨筆就是想通過(guò)實(shí)現(xiàn)這個(gè)功能來(lái)熟悉下js中排序數(shù)組等相關(guān)知識(shí)。2014-05-05JavaScript引用類型Function實(shí)例詳解
這篇文章主要介紹了JavaScript引用類型Function,結(jié)合實(shí)例形式詳細(xì)分析了javascript引用類型Function概念、定義、原理、相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2018-08-08原生JS實(shí)現(xiàn)頂部導(dǎo)航欄顯示按鈕+搜索框功能
這篇文章主要介紹了原生js實(shí)現(xiàn)頂部導(dǎo)航欄顯示按鈕+搜索框功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12通過(guò)封裝scroll.js 獲取滾動(dòng)條的值
本文通過(guò)實(shí)例代碼給大家介紹了通過(guò)封裝scroll.js 獲取滾動(dòng)條的值的相關(guān)知識(shí),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07完美解決mui框架off-canvas側(cè)滑超出部分隱藏?zé)o法滾動(dòng)的問(wèn)題
下面小編就為大家分享一篇完美解決mui框架off-canvas側(cè)滑超出部分隱藏?zé)o法滾動(dòng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01