• 数组去重–这几种方法够不?


    数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略类类型的判断。所以大家在进行数组去重的时候,一定要考虑周全。以下,就是笔者所实现的数组去重的几种简单的方式。


    1、Set实现

    第一种方法就是使用es6新增的Array.from()new Set()。如果现在你还不了解es6,那你可真是out了。建议阅读ECMAScript 6 入门或者learn-es2015

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

    2、结合{}实现

    这种方法的关键点就是:判断是否相同的时候,不要忽略对元素类型的判断。

    Array.prototype.unique = function() {
      var json = {};
      var result = [];
      this.forEach(function(value){
        var type = Object.prototype.toString.call(value).match(/s(w+)/)[1].toLowerCase();
        if(!((type + '-'+value) in json)){
          json[type + '-'+value] = true;
          result.push(value);
        }
      })
      return result;
    }
    

    3、利用Array.prototype.filter实现

    filter是es5中新增的数组的一个方法。不了解的同请阅读Array.prototype.filter()

    Array.prototype.unique = function() {
      var sortArr = this.sort();
      return sortArr.filter(function(v,i,context){
        return v !== context[i+1];
      })
    }
    

    4、利用Array.prototype.forEach实现

    includes也是es6新增的方法。不了解的同请阅读Array.prototype.includes()

    Array.prototype.unique = function() {
      var result = [];
      this.forEach(function(v){
        if(!result.includes(v)){
          result.push(v);
        }
      })
      return result;
    }
    

    5、利用Array.prototype.splice()实现

    这个方法是一个很常规的方法,关键点就是在splice一个元素之后,i要自减1。

    Array.prototype.unique = function() {
      var sortArr = this.sort(),
        i = 0;
      for(; i < sortArr.length; i++){
        if(sortArr[i] === sortArr[i+1]){
          sortArr.splice(i,1);
          i--;
        }
      }
      return sortArr;
    }
    

    6、利用Array.prototype.reduce()实现

    reduce是es5中新增的数组的一个方法。不了解的同学请阅读Array.prototype.reduce()

    Array.prototype.unique = function() {
      var sortArr = this.sort(), result = [];
      sortArr.reduce((v1,v2) => {
        if(v1 !== v2){
          result.push(v1);
        }
        return v2;
      })
      result.push(sortArr[sortArr.length - 1]);
      return result;
    }
    

    以上就是笔者所想到的几个数组去重的方式,大家如果有更好的方法,欢迎留言。也可以去我的github的仓库snippetspr,这个仓库主要用于前端代码片段的搜集,欢迎大家踊跃贡献。

    原文地址:https://segmentfault.com/a/1190000008026766

  • 相关阅读:
    ReportViewer,RDLC 报表开发之分页
    Mvc2.0 处理自定义错误.
    使用 WPS中粘贴VS里的代码,并整理格式
    Sql2008中添加程序集.
    快速整理列说明.SQL2008.
    ASP.NET MVC在IIS6下部署的小技巧
    MS SQL Server将数据导出Insert语句的存储过程
    在IE6下发生Internet Explorer cannot open the Internet site错误
    Windows7 中配置IIS7的方法(HTTP 错误 404.3 Not Found)
    安卓2.2手动开启APP2SD方法
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9963763.html
Copyright © 2020-2023  润新知