zoukankan      html  css  js  c++  java
  • 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]项,如果有则跳过;不做任何操作。

    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排序,这时候相同的元素处于相邻的位置,所以在便利数组的时候我们只将与前一值不重复的值

     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的键,不是则创建,是则判断元素的类型在键对应的值中是否存在。

       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

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

  • 相关阅读:
    临时表和表变量
    北航发生一场悲剧:计算机学子复习过程中突然倒地
    2w+长文带你剖析ConcurrentHashMap~!
    2020年最新ZooKeeper面试题(附答案)
    MQ消息中间件,面试能问些什么?
    设计模式之初体验
    IIS7 下使用ExtJs出现Ext未定义的问题
    修改apache+php上传文件大小限制
    memcache support requires ZLIB解决办法
    Windows下Memcache的安装方法
  • 原文地址:https://www.cnblogs.com/coding4/p/5597859.html
Copyright © 2011-2022 走看看