日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript小实例,多种方法实现数组去重问题

發布時間:2025/5/22 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript小实例,多种方法实现数组去重问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廢話不多說,直接拿干貨!

先說說這個實例的要求:寫一個方法實現數組的去重。(要求:執行方法,傳遞一個數組,返回去重后的新數組,原數組不變,實現過程中只能用一層循環,雙層嵌套循環也可寫,只做參考);

先給初學者解釋一下什么叫數組去重(老鳥跳過):意思就是講數組里面重復的元素去掉,比如說var arr = [3,2,4,2,1,2]; 數組去重得到的新數組是 [3,2,4,1],就是這么一個功能。

實現方法比較簡單,實現的方式也比較多,很多大牛也寫過相關的文章,之所以寫這邊博客,旨在一是備忘,二是給初學者能更好的理解其實現的原理,好,我們看第一種實現方式:

第一種,通過遍歷新數組來去重

var arr = [1,'b','b',4,3,3,4,5,1];//第一種Array.prototype.unique1 = function(){var arr1 = []; //定義一個新數組for(var i=0;i<this.length;i++){if(arr1.indexOf(this[i]) == -1){//判斷目標數組中在原數組里是否存在arr1.push(this[i]); } } return arr1;}console.log(arr); //[1,'b','b',4,3,3,4,5,1]console.log(arr.unique1()); //[1, "b", 4, 3, 5]//這種方法的主要思路就是,新建一個數組,然后在原數組中,從第一個開始,看看新數組里面有沒有這個元素,如果有,就忽略,然后進行下一個,如果沒有,則把這個元素存到新數組里面,//也就是說,每一次比較,都會遍歷新數組,直到找到相同元素為止,比較耗性能

如果大家不習慣這個寫法,可以改成下面的寫法,效果是一樣的:

var arr = [1,'b','b',4,3,3,4,5,1]; function unique1(arr){var arr1 = [];for(var i=0;i<arr.length;i++){if(arr1.indexOf(arr[i]) == -1){//判斷目標數組中在原數組里是否存在arr1.push(arr[i]); } } return arr1;}console.log(arr); //[1,'b','b',4,3,3,4,5,1]console.log(unique1(arr)); //[1, "b", 4, 3, 5]

下面的方法我就不改寫法了,你們可以按照上面的格式來改寫一下,結果我也不輸出了,因為結果是一樣的,注釋寫在代碼中,慢慢體會一下

第二種,通過hash表(這個概念有點大,具體原理就不在這里細說了,有時間我會單獨寫一遍,這是好東西)實現

var arr = [1,'b','b',4,3,3,4,5,1]; Array.prototype.unique2 = function(){var hash = {}; //定義一個hash表var arr1 = []; //定義一個新數組for(var i=0;i<this.length;i++){/*這里比較難理解,我們一步一步來看:hash是一個對象,則存在鍵值對(key:value),只不過現在是為空的,所以hash[key] = value;第一步:i=0;this[i]=this[0]=1; hash[this[0]] = hash[1] , 因為hash初始為空,沒有找到key=1的值,所以然后undefined,執行下一步:hash[1] = true(此時hash對象就有了第一組鍵值對),將原數組的第一個數添加到新數組中,重復第一步因為不重復的判斷hash的值都是undefined,而重復的都為true了,所以不重復都被添加到新數組中因為hash表存的值是存的地址,放在堆內存中,所以有多少個不重復的元素,就要分多少個內存來存放,所以這種方法比較占內存,但是相比之下,這種的運算運動是最快的,這也就是用空間來換取時間了,數據量比較小,推薦用此方法*/if(! hash[this[i]]){hash[this[i]] = true;arr1.push(this[i]); }}return arr1; }console.log(arr);console.log(arr.unique2());

第三種,通過遍歷自身的位置是否一致來實現

var arr = [1,'b','b',4,3,3,4,5,1]; Array.prototype.unique3 = function(){var arr1 = []; //定義一個新數組for(var i=0;i<this.length;i++){if(this.indexOf(this[i])==i){ //這里也是indexOf遍歷,看從第一個元素在原數組中的位置,如果第一次出現的位置和下標相等,說明當前元素的不重復的,如果不等,說明該元素前面已經出現過arr1.push(this[i]); }}return arr1; }console.log(arr);console.log(arr.unique3());

第四種,這個有點意思,只能運用到特殊場合,就是先跟數組排序,然后22比較,輸出一個排序過的新數組

Array.prototype.unique4 = function(){/*這里是思路是,先排序(默認從小到大),然后將原數組的第一個給新數組,因為是經過排序的,所以重復的只會存在在相鄰位置這里就相當于是做22比較,如果相等,則進行下一組,如果不相等,則把這個數存到新數組中,用這個數再進行比較*/this.sort();var arr1 = [this[0]];for(var i=1;i<this.length;i++){if(this[i] !== arr1[arr1.length-1]){arr1.push(this[i]); } }return arr1; }console.log(arr);console.log(arr.unique4());

哇哈,打完收工!

要求里面還說,可以使用雙層嵌套循環來實現,無法就是用2層for循環,讓每一個與原數組去比較

Array.prototype.unique5 = function(){//雙層循環,一一比較for(var i=0;i<this.length;i++){ //從0開始for(j= i+1;j<this.length;j++){ //從1開始,逐個比較if(this[i] === this[j]){ //如果恒定this.splice(j,1); //就將這個元素刪掉} } }return this; }console.log(arr);console.log(arr.unique5());

這種寫法的循環次數太多,不推薦,有人會說,第一種和第三種不也是每次都遍歷一遍嗎?跟第5種感覺也差不多呢?是的,你能這么理解,說明你理解了,但是呢,又不是特別的理解,我們說差不多那可就差太多了,indexOf()表示的是找到第一個匹配的元素就會

停止遍歷,而第5種則是不管找不找得到,都會把整個數組遍歷一遍,如果數據量大,那你覺得哪個性能要好一點?

特別注意的一點:如果在比較兩兩之間的值是全等或不等的時候,一定要用恒定(===)和不恒定(!==),因為這會涉及到元素的類型上,如 1與'1'是不恒等的!

上面的可真是干貨了,一點水分都沒有,只能靠大家自己領悟了!

行文倉促,在下才疏學淺,如果大家有更好的實現方法,請你貼出來學習一下,那就不勝感激了,如果有不對的地方,萬望指正,謝謝!

轉載于:https://www.cnblogs.com/liugang-vip/p/5219307.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的javascript小实例,多种方法实现数组去重问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美黄片一区二区三区 | 成人毛片视频在线观看 | 国产亚洲精品av | 17c在线| www在线免费观看 | 一级免费毛片 | 调教小屁屁白丝丨vk | 亚洲视频网址 | 最新超碰 | 91国产在线免费观看 | 亚洲第一二区 | 久久精品国产亚洲av无码娇色 | 日韩欧美三级视频 | 五月少妇 | 久久国产精品影院 | 成人黄色动漫在线观看 | 日本一区二区三区免费视频 | 欧美三级网站在线观看 | 91爱视频| 亚洲欧美国产视频 | 夜夜高潮夜夜爽 | 少妇无套高潮一二三区 | 色婷婷狠狠 | 精品视频一区二区三区在线观看 | 性色国产成人久久久精品 | 麻豆传媒网址 | 超碰在线| 亚洲专区中文字幕 | 国产精品毛片一区二区在线看 | 亚洲wwww | 国产999精品视频 | 一二三四国产精品 | 91高潮大合集爽到抽搐 | 自拍偷自拍亚洲精品播放 | 99久久久无码国产精品性波多 | 91久久精品国产 | 女人又爽又黄免费女仆 | 你懂的91 | 久久久久亚洲日日精品 | 老女人丨91丨九色 | 性久久久| 国产女人18毛片水18精品 | 波多野结衣在线视频免费观看 | 天躁夜夜躁狼狠躁 | 日本高清免费观看 | 国产精品免费一区二区区 | 伊人网av在线 | 成人黄色片视频 | 朋友人妻少妇精品系列 | 印度午夜性春猛xxx交 | 天天射天天干天天操 | 欧美图片一区 | 欧美透逼视频 | 精品无码国产污污污在线观看 | 色欧美日韩 | 超鹏在线视频 | 在线超碰av | 无码国内精品人妻少妇蜜桃视频 | 亚洲色图偷拍视频 | 久久精品免费av | 18禁网站免费无遮挡无码中文 | 日韩av无码一区二区三区 | 国产精品日韩在线 | www.久久网 | 狠狠干网站 | 国产亚洲欧美一区二区三区 | 色多多在线观看 | 青青射 | 国产全肉乱妇杂乱视频 | 色狠久| 国产睡熟迷奷系列精品视频 | 国产精品无码免费在线观看 | 色播激情 | 成年人毛片 | 国产乱子伦一区二区 | 亚洲hhh | 秋霞视频一区二区 | 四虎精品在线播放 | 天堂最新资源在线 | 人妻精品久久久久中文字幕 | 亚洲一区二区美女 | 亚洲色图欧美色 | 九色婷婷 | 中文字幕在线1 | 岛国二区 | 最新天堂av | 丰满圆润老女人hd | 日韩激情在线视频 | 永久免费成人 | 国产精品极品白嫩在线 | 日韩伦理中文字幕 | 日本啪啪网站 | a在线v| 欧美午夜剧场 | 日本成人一级片 | 男人天堂视频在线观看 | 狠狠干夜夜爽 | 精品福利片 | www青青草|