zoukankan      html  css  js  c++  java
  • Array数组去重

    1.循环方法

    function methodOne(arr){
        var result = [],
            arrLen = arr.length,
            item   = null,
            i,j;
        for(var i = 0; i < arrLen; i++){            //循环数组长度
            item = arr[i];                          //当前项
            var resultLen = result.length;          //新建数组长度
            for(var j = 0; j < resultLen; j++){     //循环新数组
                if(item === result[j]){             //如果当前item等新数组中的其中一个就跳过;
                    break;                          //停止循环
                }
            }
            if(j === resultLen){                    //如果长度相等就添加当前项
                result.push(item);
            }
        }
        return result;
    }

    2.数组的indexOf()方法,需要做IE兼容

    function methodTwo(arr){
        var result = [];
        var arrLen = arr.length;
        var item,i;
        for(var i = 0; i < arrLen; i++){
            item = arr[i];
            if(result.indexOf(item) === -1){     //如果不存在就添加
                result.push(item);
            }
        }
        return result;
    }
    //添加数组IndexOf方法
    if (!Array.prototype.indexOf){
        Array.prototype.indexOf = function(elt /*, from*/){
            var len = this.length >>> 0;
            var from = Number(arguments[1]) || 0;
            from = (from < 0) ? Math.ceil(from) : Math.floor(from);
            if (from < 0){
                from += len;
            }
    
            for (; from < len; from++){
                if (from in this && this[from] === elt){
                    return from;
                }
            }
            return -1;
        };
    }

    3.ES5方法的forEach()方法

    function methodThree(arr){
        var result = [];
        //三个参数:数组元素,元素的索引,数组本身
        arr.forEach(function(item,index,array){
            //从前面开始查找数组中的元素,如果有重复的,查找的索引与元素索引不相等
            if(array.indexOf(item) === index){
                result.push(item);
            }
        })
        return result;
    }

    4.判断类型(能去除个对象组成的数组)

    function methodFive(arr){
        var result = [];
        var hash = [];
        var len = arr.length;
        for(var i = 0; i < len; i++){
            var item = arr[i];
            var key;
            key = typeof(item) + item;          //判断类型+值
            if(typeof(item) === "object"){      //多个对象时
                for(var j in item){             //循环键值对
                    key = item[j];              //判断类型+值
                }
            }
            if(hash[key] !== 1){                //如果没有此类型+值,则添加,并将hash[key]赋值为1,如果有重复,下次就有值了
                result.push(item);
                hash[key] = 1;
            }
        }
        return result;
    }

    5.对象的重写覆盖特性(最快的)

    Array.prototype.unique = function(){
        var obj = {},
            len = this.length,
            result = [],
            i;
        for(i = 0; i < len; i++){
            var item = this[i];
            obj[item] = item;       //obj[this[i]]得属性值,如有相同值就会覆盖重写了
        }
        for(i in obj){
            result.push(obj[i]);
        }
        return result;
    }

    另一种函数定义方法(以上同理)

    function eliminateDuplicates(arr){
        var i,
            len = arr.length,
            result = [],
            obj = {};
        for(var i = 0; i < len; i++){
            obj[arr[i]] = 0;
        }
        for(i in obj){
            result.push(i);
        }
        return result;
    }

    测试

    var arr1 = [5,7,3,1,7,5,6];
    var arr2 = [8,9,5,9,8,3,"3",1];
    var arr3 = ["q","b","a","o","q","a"];
    var arr4 = ["a","b","c","a","a"];
    var arr5 = [{name:"xiaoma"},1,"a",{id:"xl"}];
    var arr6 = [{name:"xiaoma"},{name:"xiaoma"}];
    var arr7 = [{name:"xiaoma",id:5},{name:"xiaoma2",id:6},{name:"xiaoma3",id:5}];
    var arr8 = [true,false,false,true];
    var arr9 = [/[d]/,/[w]/];
    var arr10 = [/[d]/,/[d]/];

     

  • 相关阅读:
    @atcoder
    @loj
    @atcoder
    @gym
    @codeforces
    @atcoder
    @bzoj
    @loj
    Kafka常用命令
    Kafka入门介绍
  • 原文地址:https://www.cnblogs.com/alantao/p/5725984.html
Copyright © 2011-2022 走看看