资讯专栏INFORMATION COLUMN

js数组去重的几种方法

mykurisu / 800人阅读

摘要:三种方法利用判断新数组中实际上也是使用的类似的传入数组如果当前数组的第已经保存进了临时数组,那么跳过,否则把当前项到临时数组里面利用判断旧数组结果数组如果当前数组的第项在当前数组中第一次出现的位置不是,那么表示第项是重复的,忽略掉。

三种方法 利用indexOf判断新数组

underscore.js中实际上也是使用的类似的indexOf

  //传入数组
  function unique1(arr){
    var tmpArr = [];
    for(var i=0; i

利用indexOf判断旧数组

  function unique2(arr){
    var tmpArr = []; //结果数组
    for(var i=0; i

利用hash查找


这里利用了JS对象的实现就是hash表的特性

  function unique3(arr){
    var tmpArr = [], hash = {};//hash为hash表
    for(var i=0;i

数组扩展

  Array.prototype.unique1 = function (){
    var tmpArr = []; 
    for (var i = 0; i < this.length; i++){
      if (tmpArr.indexOf(this[i]) == -1){
        tmpArr.push(this[i]);
      }
    }
    return tmpArr;
  }

  Array.prototype.unique2 = function(){
      var tmpArr = []; //结果数组
      for(var i = 0; i < this.length; i++){
        if (this.indexOf(this[i]) == i){
          tmpArr.push(this[i]);
        }
      }
      return tmpArr;
  }

  Array.prototype.unique3 = function(){
      var tmpArr=[], hash = {};
      for(var i = 0; i < this.length; i++){
        if (!hash[this[i]]){
            hash[this[i]] = true; 
            tmpArr.push(this[i]); 
        }
      }
      return tmpArr;
  }
使用Set

SetMap是ES6中新增的数据结构

Set直接可以存储不重复的一组key,这个key也可以是对象,字符串等

创建set
var s = new Set([1, 2, 3,]);
s; // Set {1, 2, 3}
新增元素
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}//重复元素不会被添加
删除元素
s; // Set {1, 2, 3, 4}
s.delete(3);
s; // Set {1, 2, 4}
遍历元素

MapSet无法使用下标

ES6标准引入了新的iterable类型,ArrayMapSet都属于iterable类型

var s = new Set(["A", "B", "C"]);

for (var x of s) { // 遍历Set
    alert(x);
}

或者直接使用iterable内置的forEach方法

forEach方法是ES5.1标准引入的

var s = new Set(["A", "B", "C"]);
s.forEach(function (element, set) {
    alert(element);
});
参考文章

最全前端面试问题

廖雪峰-Map和Set

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85852.html

相关文章

  • JS去重几种实现方法

    摘要:方法新特性方法利用对象名唯一方法利用数组包含方法排序比较兄弟元素方法双循环比较 方法1:ES6新特性Set Array.prototype.rmSome = function() { return Array.from(new Set(this)); } 方法2:利用对象名唯一 Array.prototype.rmSome = function() { let te...

    shengguo 评论0 收藏0
  • 数组去重--这几种方法够不?

    摘要:数组去重是校招面试的必考知识点。以下就是笔者所实现的数组去重的几种简单的方式。结合实现这种方法的关键点就是判断是否相同的时候不要忽略对元素类型的判断。以上就是笔者所想到的几个数组去重的方式大家如果有更好的方法欢迎留言。 数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略...

    wendux 评论0 收藏0
  • js去重几种方法

    摘要:去重真的是面试必考啊。下标判断,也可以对象的键值还要先排序 js去重真的是面试必考啊。 es6 set function duplicate(arr){ return [...new Set(arr)] } indexOf下标判断,lastIndexOf也可以 function duplicate2(arr){ let res=[]; arr.forEach((item)...

    cnio 评论0 收藏0
  • JS数组重的集中方案

    摘要:去重的几种方案双层循环排序后比较相邻元素是否相等压入数组有限制,但效率高高性能数组去重 JS去重的几种方案 new Set() 双层for循环 + splice Array.fliter + indexof Arroy.sort + 排序后比较相邻元素是否相等压入数组 for ... of + includes for ... of + object 有限制,但效率高 JS高性能数组...

    wslongchen 评论0 收藏0

发表评论

0条评论

mykurisu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<