• AS3)实现过滤数组/删除数组中的相同元素(记录6种方法)


    开门总结:

     关联数组(O(1))比数组(O(n))快;

    关联数组的key是唯一的,不会重复

    var a:Array = [1,21,21,121,21,,12,1,21,21,21,2,12,1,23,3,21,32,3,213,,,];

    function sss(arr:Array):Array{
     var o:Object= {};
     var returnArr:Array = [];
     
     for each(var aa:int in arr){
      if(!o[aa]){
       returnArr[returnArr.length]=aa;
      }
      o[aa] = true;
     }
     return returnArr;
    }

    实现过滤数组中的相同元素。方法一:
    var myArr:Array=[1,2,3,4,5,1,1,3,5,4,2,1,3,2,2,5];

    trace(filterArray(myArr)); //输出:1,2,3,4,5

    function filterArray(arr:Array):Array {

            var tempArr:Array=[];

            var l:uint=arr.length;

            for (var i:uint=0;i<l;i++) {

                    if (tempArr.indexOf(arr[i])==-1) {  

    //在新的数组里搜索是否存在相同元素,如果不存在加进新的数组里

                            tempArr.push(arr[i]);

                    }

            }

            return tempArr;

    }

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

    方法二:
    var arr:Array=["aa","bb","cc","dd","bb","cc","aa","bb","gg","aa","cc"];

    function formatX(arr:Array):Array {

            var obj:Object={};

            return arr.filter(function(item:*, index:int, array:Array):Boolean{

                                   return !obj[item]?obj[item]=true:false

                                                                    });

    }

    trace(formatX(arr))

    //该方法的实现过程是 对于”aa”来讲 obj["aa"]的值为undefined 而!undefined为true,就会返回该成员,然后 将obj["aa"]的值设为true,下一次遇到obj["aa"]时,obj["aa"]的值为true,!obj["aa"]的值就为false,就不返回该成员。

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

    //方法一,普通遍历(这个方法还不完善,比如删除掉某个索引的值,那么后边所有项的索引全部减1,但是下一次遍历时仍然是从这个被删除的位置加1,这样就漏掉了一个刚刚因为索引值减少而占据在被删索引的项。比如[1,1,1,1,1,1,1]遍历后变成[1,1,1]而不是[1])
    function myArray_Unique(myArray)
    {
         //var myArray=new Array("a","a","c","a","c","d","e","f","f","g","h","g","h","k");
        var haha=myArray;
        for(var i=0;i<myArray.length;i++)
        {
            for(var j=0;j<myArray.length;j++)
            {
                 temp=myArray[i];
                 if((i+j+1)<myArray.length&&temp==myArray[i+j+1]) //如果当前元素与后一个元素相等
                      haha.splice(i+j+1,1); //然后就移除下一个元素 
            }
        }
        return haha;


    //方法二(ok)
    function getUnique(someArray)
    {
    tempArray=someArray.slice(0);//复制数组到临时数组
    for(var i=0;i<tempArray.length;i++)
    {
    for(var j=i+1;j<tempArray.length;)
    {
    if(tempArray[j]==tempArray[i])
    //后面的元素若和待比较的相同,则删除并计数;
    //删除后,后面的元素会自动提前,所以指针j不移动
    {
    tempArray.splice(j,1);
    }
    else
    {
    j++;
    }
    //不同,则指针移动
    }
    }
    return tempArray;
    }



    //方法三 正则表达式 -- 适用于字符型数组
    function getUnique2(A)
    {
    var str = "x0f"+ A.join("x0f");
    while(/(w+)[^1]*1/.test(str))
    str = str.replace("x0f"+ RegExp.$1, "");
    return str.substr(1).split("x0f");
    }


    //方法四 关联结构
    Array.prototype.unique = array_unique;
    function array_unique()
    {
    var o = new Object();
    for (var i=0,j=0; i<this.length; i++)
    {
    if (typeof o[this[i]] == 'undefined')
    {
    o[this[i]] = j++;
    }
    }
    this.length = 0;
    for (var key in o)
    {
    this[o[key]] = key;
    }
    return this;
    }

  • 相关阅读:
    学习笔记:字符串-Hash
    模板:高精度
    关于我自己
    学习笔记:数学-GCD与LCM-素数筛法
    学习笔记:数学-GCD与LCM-唯一分解定理(质因数分解)
    学习笔记:数学-GCD与LCM-整除的基础概念
    题解 洛谷P1990 覆盖墙壁
    学习笔记:平衡树-splay
    npm发布myself的插件
    javascript API文档
  • 原文地址:https://www.cnblogs.com/chenhongyu/p/3342056.html
Copyright © 2020-2023  润新知