数组去重,JS知识点(一)

有的时候,想的是挺好的,但是下笔的时候经常会忘了想要写些什么。积累一些知识点,总是好的,下面让我们看一下数组的去重。

数组的去重

题目要求

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq()

输出结果

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']

分析需求

题目是给Array添加方法,所以需要用到prototype。数组去重方法本身并不难,但是在JavaScript中,很多人会忽视NaN的存在,因为在JS中NaN != NaN,我们需要对它进行一下判断。具体操作如下

代码实现

Array.prototype.uniq() = function(){
  var arr = [];
  var flag = true;
  this.foreach(function(item){
    //判断是否是NaN
    if(item != item){
      flag && arr.indexOf(item) === -1 ? arr.push(item) : '';
      flag = false;
    } else{
      arr.indexOf(item) === -1 ? arr.push(item) : '';
    }
  })
  return arr;
}

ES6

ES6新增了 Set对象,也就是我们所说的“集合”,它类似于数组,但是成员的值都是唯一的,没有重复的值。所以可以方便去重。
Set本身是一个构造函数,用来生成Set数据结构。

如果用ES6为 Array 对象添加一个去除重复项的方法,则可以如下实现:

Array.prototype.uniq() = function(){
  return Array.from(new Set(this));
}

代码中用 Array.fromSet 结构转换成数组,如果你要优雅一点,可以使用 ES6 的扩展运算符。如下

Array.prototype.uniq() = function(){
  return [...new Set(this)];
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,674评论 0 13
  • [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...
    郭子web阅读 5,780评论 0 1
  • 我看到很多公司都在做直播软件,所以一时兴起,也开始模仿着实现了一些功能,通过查阅资料,发现网上对于直播app的学习...
    elite_kai阅读 3,984评论 0 1
  • 卓普科技曾写过共享单车的倒闭企业,就包含这一家运营不到4个月的“最短命”共享单车公司,而今,居然又奇迹般的想回来,...
    暗月圣雪阅读 2,571评论 0 0
  • 在网上看见一个不错的登录注册效果,尝试着写了一遍,主要使用TextInputLayout做输入框,Floating...
    cherishyan阅读 5,601评论 1 10