js数组和数组去重的几种简单的方法

http://blog.csdn.net/liangklfang/article/details/49300417

 1.证明一个对象是数组的方法。

方法(1)

[].constructor === Array
true
[].constructor === 'Array'
false

方法(2)

Object.prototype.toString.call([]) == "[object Array]"

以下数js数组去重。==========================================================

先看博客:http://www.itnose.net/detail/6392462.html

这里有一个hash的方法:http://www.itnose.net/detail/6431264.html

第一种遍历方法:

a.是检测新数组newArr里有没有包含Arr里的i项,如果没有则向newArr里添加Aii[i]项,如果有则跳过;不做任何操作。

1
2
3
4
5
6
7
8
9
10
11
12
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9]; 
   function unArray (Arr) {           
       var newArr = [];       
       for (var i = 0; i < Arr.length; i++) {           
           if (newArr.indexOf(Arr[i]) == -1){//检测newArr数组里是否包含Arr数组的内容,==-1检索的字符串没有出现则为-1      
                newArr.push(Arr[i])//把Arr数组的第i项插入新数组          
            }         
        };           
       return newArr;       
     }   
 unArray(Arr);
  //console.log(unArray(Arr));

b.是在Arr数组里检测,Arr.indexOf(Arr[i])返回某一项在Arr数组里第一次出现的位置,如果第一次出现就push到newArr数组去,如果第二次出现,则什么都不操作。

var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {  
  var newArr = [Arr[0]]; 
   for (var i = 1; i < Arr.length; i++) {   
       if (Arr.indexOf(Arr[i]) == i){//检测Arr数组第一次出现的位置是i        
          newArr.push(Arr[i])//把Arr数组的第i项插入新数组newArr 
        }   
   };   
   return newArr;//返回新数组newArr
  }
unArray(Arr);
//console.log(unArray(Arr));

第二种方法:

排序后相邻去除法(这种排序有序局,有些不是数字的数组是无法进行排序的。)

 思路:先将数组经过sort排序,这时候相同的元素处于相邻的位置,所以在便利数组的时候我们只将与前一值不重复的值

1
2
3
4
5
6
7
8
9
10
11
function unique(array){
       var reArr=[array[0]];
       var len=array.length;
           array.sort();
       for(var i=1;i<len;i++){
           if(array[i]!=reArr[reArr.length-1]){//注意这里
               reArr.push(array[i]);
           }
       }
       return reArr;
   }

第三种方法:

对象键值对法

思路:新建一js对象json以及新数组reArr,遍历数组元素是否为json的键,不是则创建,是则判断元素的类型在键对应的值中是否存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   function unique(array){
      var json = {}, reArr = [], len = array.length, val, type;
        for (var i = 0; i < len ; i++) {
            val = array[i];
            type = Object.prototype.toString.call(val);
            if (!json[val]) {//如果键对应的值不存在则是第一次存取
                json[val] = [type];//设置该键为数组,并赋值元素类型
                reArr.push(val);//往reArr中添加元素
            } else if (json[val].indexOf(type) < 0) {
                json[val].push(type);
                reArr.push(val);
            }
        }
        return reArr;
    }
//该方法有bug,当有多个{}时,只能保存一个{}

第四种方法:

个人感觉第三种没有什么鸟用。

Array.from(new Set([3,2,20,45,12,20]))

第五种方法:

[...new Set([3,2,20,45,12,20])]

我认为这是属于去重的最简单的一种方式了。

=============

Js类数组转数组的方法。

http://www.jianshu.com/p/f8466e83cef0 

Array.prototype.slice.call(arrayLike)

这里有一篇博客:

这里的话,我们必须先http://www.jb51.net/article/46154.htm

这里边推荐的第三种方法。

posted @   飘然离去  阅读(480)  评论(0)    收藏  举报
编辑推荐:
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
· C23和C++26的#embed嵌入资源指南
· 「EF Core」框架是如何识别实体类的属性和主键的
· 独立开发,这条路可行吗?
阅读排行:
· 他没买 iPad,而是花了半年时间,为所有“穷学生”写了个笔记神器
· Visual Studio 现已支持新的、更简洁的解决方案文件(slnx)格式
· 从 Redis 客户端超时到 .NET 线程池挑战:饥饿、窃取与阻塞的全景解析
· 2025年中总结:我想我克服公众演讲的恐惧了,一个社恐分子突破自我的故事
· 3.1k star!推荐一款开源基于AI实现的浏览器自动化插件工具 !
点击右上角即可分享
微信分享提示