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給去除,湊合能用。。。有的同學肯定會說那怎么行,咋們干程序是個嚴謹的事,一定要追求完美,

那有什么辦法可以辦法可以解決呢??其實是有的。。。我們可以借助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;

首先我們通過npm去安裝它

這樣我們全局都能使用babel這個命令了,當然你也可以在改文件根目錄下把它注入依賴

然后在安裝一個babel-preset-es2015的模塊

然后在根目錄下配置個.babelrc的文件,在里面配置方法

沒錯,這就是剛才我們安裝的第二個模塊,我們告訴babel用es2015去轉換;

萬事俱備,只欠一行命令了,接下來我們在命令行輸入:

removeDub.js就是剛才es6語法的js文件,babel轉換后輸出es5語法的js文件。

轉換前:

轉換后

關於更多的ES6的語法,其實大家可以去看看阮老師寫的ECMAScript 6入本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM