前几天碰到一个题目,要求是这样的.

题目描述

为 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;
}

最新文章

  1. java实现链表
  2. shell常用命令
  3. Java猜拳小游戏(剪刀、石头、布)
  4. Request.MapPath和ServerMapPath
  5. CI重定向:php(codeigniter)中如何重定向
  6. Java程序设计 实验五
  7. JQuery 表单校验插件 validate 使用纪录
  8. linux下修改系统时间
  9. js 读写cookie。不同路径会储存各自的cookie。而 在v.net环境下读写是在 / 根目录。
  10. mysql 建立索引场合及索引使用
  11. Machine Learning for hackers读书笔记(三)分类:垃圾邮件过滤
  12. poj3687 拓扑序
  13. MDI-多文档窗体
  14. 【转】USB协议架构及驱动架构
  15. 调用webService的几种方式
  16. python3 第十六章 - 函数
  17. CSAPP-程序优化
  18. 4.4、Android Studio在命令行运行Gradle
  19. 翻译 异步I/O不会创建新的线程
  20. SICP 习题 (1.43)解题总结

热门文章

  1. 649. Dota2 Senate
  2. php代码审计6审计xss漏洞
  3. SignalR-001
  4. 开发效率神器 uTools - 偏前端和 UI
  5. Java create azure web app
  6. [译文]Casperjs1.1.0参考文档-快速开始
  7. 线段树(压位)luogu P1558色板游戏
  8. AF 与 PF区别
  9. kotlin spring mvc request json 请求
  10. LeetCode记录之14——Longest Common Prefix