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

数组去重,是校招口试的必考知识点。简朴的说,数组去重就是将一个数组中的雷同的元素删除,只保存个中的一个。这里的雷同实际上是一个圈套,有很多同砚只以为值相称即为雷同,而疏忽类范例的推断。所以人人在举行数组去重的时刻,一定要斟酌全面。以下,就是笔者所完成的数组去重的几种简朴的体式格局。

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,这个堆栈重要用于前端代码片断的汇集,迎接人人积极孝敬。

    原文作者:2json
    原文地址: https://segmentfault.com/a/1190000008026766
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞