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


方法一:
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值