• js数组去重


    js数组去重

    这个问题我觉得面试问道的概率非常大,就目前我这个阶段而言哦,对于技术特别好的人,毕竟没到那个水准,不知道面的是什么,反正我面的公司一般都会问。

    js数组去重就我而言,我只知道三种,下面为大家列出

    1. 

    Array.prototype.array1 = function() {
      var res = [this[0]];
      for (var i = 1; i < this.length; i++) {
        var repeat = false;
        for (var j = 0; j < res.length; j++) {
          if (this[i] == res[j]) {
            repeat = true;
            break;
          }
        }
        if (!repeat) {
          res.push(this[i]);
        }
      }
      return res;
    }
    var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]

    alert(arr.array1());

         这种方法实现原理是:构建一个新的数组存放结果,for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比,若结果数组中没有该元素,则存到结果数组中

    2.  

    Array.prototype.array2= function() {
      this.sort(); //先排序
      var res = [this[0]];
      for (var i = 1; i < this.length; i++) {
        if (this[i] !== res[res.length - 1]) {
          res.push(this[i]);
        }
      }
      return res;
    }
    var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]

    alert(arr.array2());

    这种方法实现原理是:先将原数组进行排序,检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置,如果不相同,则将该元素存入结果数组中

    3.

    Array.prototype.array3= function(){
      var res = [];
      var json = {};
      for(var i = 0; i < this.length; i++){
         if(!json[this[i]]){
            res.push(this[i]);
            json[this[i]] = 1;
         }
       }
       return res;
    }

    var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0];
    alert(arr.array3());

    这种方法实现原理是:创建一个新的数组存放结果,创建一个空对象,for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中

    第三种方法是本人推荐使用的,相对其他几种,效率会高很多。有其他方法可以实现的话,欢迎补充。

    <--------------------------------------------------分割线---------------------------------------------------------------->

    我又想到方法,来补充一下

    ES6里新添加了两个很好用的东西,set和Array.from。

    set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目。

     比如我们现在有个数组var arr = [1,1,2,2,3,3,4,4,'5','5']

    我们在控制台用Set输出一下

    console.log(new Set(arr))

    在这我们可以看见,重复的项已经被去掉了,在上图中发现,咦,set输出的是一个对象啊,但是我们有时候想得到一个数组,那怎么办。

    前边我说了es6添加了两个好东西,还有个没说呢,那就是Array.from。它的作用,就是可以把类数组对象、可迭代对象转化为数组。

    还是刚刚那个数组arr,我们用Array.from来试试,看下输出的是个神马东东。

    这样数组去重,是不是比以前我们写的那些简单多了呢。

    这是es6的语法,新东西会存在浏览器的兼容问题,所以,在使用前,先看看您项目的兼容范围吧!

  • 相关阅读:
    微软免费人工智能课程
    如何定义,创建,启动一个线程
    什么是进程,什么是线程?
    Hashtable 数据遍历的几种方式
    action中result没有值
    <global-results>怎么用
    普通请求和ajax请求的区别
    result默认返回action中的所有数据,要想返回指定的数据怎么做呢
    ajax技术的应用?
    什么是国际化
  • 原文地址:https://www.cnblogs.com/maomao93/p/6758027.html
Copyright © 2020-2023  润新知