今天五一,在出去玩以前趕忙寫篇博客,時刻不要忘記學習^_^!!es6
提到數組去重,想必你們都不陌生,會的同窗可能噼裏啪啦寫出好幾個,下面來看看以前常見的去重代碼:算法
'use strict'; var arr = [1,'a',undefined,null,NaN,1,'a',undefined,null,NaN]; Array.prototype.remDub = Array.prototype.remDub || function(){ this.sort(); var arr = [this[0]]; var bOk = true; for(var i = 1; i<this.length;i++){ if(this[i] !== arr[arr.length-1]){ arr.push(this[i]); } } return arr; }; console.log(arr.remDub()); // [ 1, NaN, NaN, 'a', null, undefined ]
上面這種是網上最多見的去重,看起來還行,就是沒有把NaN給去除,湊合能用。。。有的同窗確定會說那怎麼行,咋們幹程序是個嚴謹的事,必定要追求完美,npm
那有什麼辦法能夠辦法能夠解決呢??實際上是有的。。。咱們能夠藉助json這種數據結構來實現,下面請看代碼:json
'use strict'; var arr = [1,'a',undefined,null,NaN,1,'a',undefined,null,NaN]; Array.prototype.remDub = Array.prototype.remDub || function(){ var json = {}; for(var i = 0; i<this.length; i++){ json[this[i]] || (json[this[i]] = this[i]); } var arr = []; for(var name in json){ arr.push(json[name]); } return arr; }; console.log(arr.remDub()); //[ 1, 'a', undefined, null, NaN ]
上面這種利用json能夠實現,其實在es6沒出來前用這個是不錯,可是es6是將來發展趨勢,因此來看看es6時如何實現的吧:數組
'use strict'; let arr = [1,'a',undefined,null,NaN,1,'a',undefined,null,NaN]; Array.prototype.remDub = Array.prototype.remDub || function () { //return Array.from(new Set(this)); return [...new Set(this)]; }; console.log(arr.remDub()); //[ 1, 'a', undefined, null, NaN ]
沒錯,用es6區區幾行代碼就解決了去重,利用 Set的這種不重複的數據結構。Set內部判斷兩個值是否不一樣,使用的算法叫作"Same-value equality",它相似於精確相等運算符(===
),主要的區別是NaN等於自身,而精確相等運算符認爲NaN不等於自身。瀏覽器
到了這裏不少同窗會說,如今好多瀏覽器都不支持es6語法,用了也等於白用,那麼這裏我就在在介紹個東西吧。它叫babel;babel
首先咱們經過npm去安裝它數據結構
這樣咱們全局都能使用babel這個命令了,固然你也能夠在改文件根目錄下把它注入依賴學習
而後在安裝一個babel-preset-es2015的模塊this
而後在根目錄下配置個.babelrc的文件,在裏面配置方法
沒錯,這就是剛纔咱們安裝的第二個模塊,咱們告訴babel用es2015去轉換;
萬事俱備,只欠一行命令了,接下來咱們在命令行輸入:
removeDub.js就是剛纔es6語法的js文件,babel轉換後輸出es5語法的js文件。
轉換前:
轉換後:
關於更多的ES6的語法,其實你們能夠去看看阮老師寫的ECMAScript 6入本。