ES6数组去重

今天五一,在出去玩以前赶忙写篇博客,时刻不要忘记学习^_^!!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入本。

相关文章
相关标签/搜索