關於數組去重這個問題,我曾經在牛客網上就遇到過一次,後來在做一些網上的筆試的時候又碰到了這個問題,其實數組去重的方法有非常多種,五花八門的。但其實我覺得這隻是一件很小的事,何必弄得好像實現的方法越複雜就越厲害一樣。廢話不多說,這裡我只介紹我所認可的兩種方法。 第一種,就是很普通的思維,比如,對於[1 ...
關於數組去重這個問題,我曾經在牛客網上就遇到過一次,後來在做一些網上的筆試的時候又碰到了這個問題,其實數組去重的方法有非常多種,五花八門的。但其實我覺得這隻是一件很小的事,何必弄得好像實現的方法越複雜就越厲害一樣。廢話不多說,這裡我只介紹我所認可的兩種方法。
第一種,就是很普通的思維,比如,對於[1,2,2,3,3,3,4,4,4,4]這個數組來說,我們的思路就是,新建一個空的數組,然後對這個要處理的數組做遍歷,遍歷的每一項都會問一下新數組:“你有沒有存過我啊?”,存過(新數組.indexOf(i)>0),那麼就不再存了;沒存過(新數組.indexOf(i)==-1),就存進去。所以就有瞭如下代碼:
1 var arr=[1,2,2,3,3,3,4,4,4,4]; 2 (function (arr){ 3 newArr=[]; 4 for(let i=0;i<arr.length;i++){ 5 if(newArr.indexOf(arr[i])===-1){ 6 newArr.push(arr[i]); 7 } 8 }; 9 10 })(arr); 11 12 console.log(newArr);
在這裡,我用一個自執行的匿名函數對數組做了個遍歷,由於newArr是一個全局變數,在執行後不會被銷毀,而是返回出去,最後列印的結果正是[1,2,3,4];
這是es5最朴實無華的寫法,可以說是一種“古代的寫法”吧,es6中有一種結構叫set,它天生就自帶互異性,就是說肯定不會有重覆的,看一段代碼就知道了。
1 var s=new Set(arr);//結果為Set{1,2,3,4} 2 var newArr=Array.from(s);//把這個類數組對象轉為真正的對象 3 console.log(newArr);
怎麼樣?是不是超簡單,在第一行代碼中就已經得到了一個無重覆的類數組對象,而Array.from的作用正是把一個類數組對象(比如平常我們用document.getElementsByTagName獲取到的元素集合就是類數組對象)轉變為真正的對象。