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

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了数组去重--这几种方法够不?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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


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实现

filteres5中新增的数组的一个方法。不了解的同请阅读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()实现

reducees5中新增的数组的一个方法。不了解的同学请阅读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,这个仓库主要用于前端代码片段的搜集,欢迎大家踊跃贡献。

脚本宝典总结

以上是脚本宝典为你收集整理的数组去重--这几种方法够不?全部内容,希望文章能够帮你解决数组去重--这几种方法够不?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。