1. 程式人生 > >數組去重古與今

數組去重古與今

遍歷 是不是 dex doc 們的 let from get 一段

  關於數組去重這個問題,我曾經在牛客網上就遇到過一次,後來在做一些網上的筆試的時候又碰到了這個問題,其實數組去重的方法有非常多種,五花八門的。但其實我覺得這只是一件很小的事,何必弄得好像實現的方法越復雜就越厲害一樣。廢話不多說,這裏我只介紹我所認可的兩種方法。

  第一種,就是很普通的思維,比如,對於[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獲取到的元素集合就是類數組對象)轉變為真正的對象。

數組去重古與今