从数组去重这个函数来体验es6的高效率
前几天碰到一个题目,要求是这样的.
题目描述
为 Array 对象添加一个去除重复项的方法
示例1
输入
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
输出
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
es5代码
它的在线编辑器只支持es5, 所以写下了一长串代码
Array.prototype.uniq = function () {
    var i = this.length - 1;
    for ( ; i >= 0; i--) {
        for (var j = i - 1; j >= 0; j--) {
            if (this[i] === this[j]) {
                this.splice(i, 1);
                break;
            }
            var isNumber = typeof this[i] === 'number' && typeof this[j] === 'number';
            // 判断两者是否都是NaN
            if (isNumber && isNaN(this[i]) && isNaN(this[j])) {
                this.splice(i, 1);
                break;
            }
        }
    }
    return this;
}
两个for循环, 时间复杂度就是 O(n**2) 。
es6代码
Array.prototype.uniq = function() {
  return [...new Set(this)];
}
啊, 这就完了? 没错, 这就完了。解释下上面的代码, Set是es6里面的新对象, 有点雷系数组,但是它的没有重复的值, 数组扩展运算符 [...array], 这里的array可以是数组也可以是类数组对象, 作用就是把array的每一项提取出来作为新数组的一项。
上面的代码不会改变原数组, 如果要改变原数组, 可以修改如下
Array.prototype.uniq = function() {
  const arr = [...new Set(this)];
  this.splice(0, this.length, ...arr);
  return arr;
}
从数组去重这个函数来体验es6的高效率的更多相关文章
- php数组去重的函数代码
		php中数组去重的小例子. 代码如下: <?php /** * 数组去重复的小函数 * by www.jbxue.com */ function assoc_unique($arr ... 
- 数组去重的三种方法 es6
		[1,2,3,4,5,6,7,8,9,2,2,3,3,4,1].filter(function(el,index,arr){ return (index === arr.indexOf(el)); } ... 
- JS 封装一个对数组去重的函数
		var zz = [1,2,3,5,5,7,8,6,6]; var se = []; d(se); function d(attr){ for(var i = 1;i<zz.length;i++ ... 
- 数组去重--ES6方法
		数组去重方法1:用es6的set和...扩展运算符 let arr = [1,2,3,4,4,5,2]; console.log([...new Set(arr)]) // [1, 2, 3, 4, ... 
- 使用JavaScript进行数组去重——一种高效的算法
		最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑. 数组去重的算法有很多种,以下是一种. 思路如下: 定义一个空的对 ... 
- 使用es6新增Set函数快速数组去重
		使用new Set()快速数组去重: let arr = [1, 2, 2, 3, 4, 5, 5, 5, 6] let set = new Set([...arr]) console.log([.. ... 
- JavaScript数组去重—ES6的两种方式
		说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代 ... 
- ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重
		一种新的数据类型,它是对象的一种,Set,很像数组,又不是数组. Set 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ... 
- ES6数组去重
		今天五一,在出去玩之前赶紧写篇博客,时刻不要忘记学习^_^!! 提到数组去重,想必大家都不陌生,会的同学可能噼里啪啦写出好几个,下面来看看之前常见的去重代码: 'use strict'; var ar ... 
随机推荐
- sublime  快捷键 1到9的顺序
			p{$$}*9 
- 从程序员的角度深入理解MySQL
			前言 今天我将站在程序员的角度以MySQL为例探索数据库的奥秘! 数据库基本原理 我对DB的理解 1.数据库的组成:存储 + 实例 不必多说,数据当然需要存储:存储了还不够,显然需要提供程序对存储 ... 
- 洛谷P2770 航空路线问题(费用流)
			传送门 完了这题好厉害……字符串什么的好麻烦…… 要求从$1$到$n$的路径,不重复,经过边数最多 每一个点拆成两个,$A_i,B_i$,然后$A_i$到$B_i$连容量为$1$,费用为$1$的边,保 ... 
- 【FAQ】服务下线
			原因:磁盘已满 
- kill 进程的一些小细节
			终止前台进程,可以用Ctrl+C组合键.但对于后台进程需要用kill命令. kill PID 还可以加信号(参数),默认情况下是编号为15的信号.term信号将终止所有不能捕捉该信号的进程. -s 可 ... 
- Ubuntu16.04LTS安装集成开发工具IDE: CodeBlocks 和Eclipse-cdt
			上文中,我们已经介绍了QT5.10.0在Ubuntu下的安装 https://www.cnblogs.com/si-lei/p/9240230.html, 接下来我们介绍CodeBlocks以及Ecl ... 
- Unity---动画系统学习(4)---使用混合树(Blend Tree)来实现走、跑、转弯等的动画切换
			1. 介绍 Blend Tree用于多个动画之间的混合,比如走到跑的切换.转弯的切换. 如果用动画学习笔记(3)中的方法,需要新建很多的状态,不仅麻烦,而且切换状态时也很容易不流畅. 而Blend T ... 
- 条目十《了解分配子(allocator)的约定和限制》
			条目十<了解分配子(allocator)的约定和限制> 在STL标准库中,分配子的存在有点怪异. 一开始的设计意图是提供一个内存模型的抽象,让使用库者库忽略操作系统的near指针和far指 ... 
- centos配置免密登录
			一.准备工作 1.先准备两台centos机器.例如:192.168.1.100和192.168.1.101两台机器,配置101免密登录100 2.默认centos会自带ssh和stfp,机器未安装,请 ... 
- python实现对象'+'操作符
			python对象实现__add__,__radd__方法即可实现'+'操作符 demo: # coding=utf-8 class Person(object): def __init__(self, ... 
