Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从数组中删除项目数组_Actionscript 3 - Fatal编程技术网

Actionscript 3 从数组中删除项目数组

Actionscript 3 从数组中删除项目数组,actionscript-3,Actionscript 3,我想出了这个简单的片段 var a:Array = new Array( 1,2,3,4,5,6,7,8); var b:Array = new Array( 6,7,8 ) //<<<These items need to be removed from a public function removeItemsFromAThatAreListedInB(a:Array, b:Array ) { for ( var i=0 ; i< a.length ;i+

我想出了这个简单的片段

var a:Array = new Array( 1,2,3,4,5,6,7,8);
var b:Array = new Array( 6,7,8 ) //<<<These items need to be removed from a 

public function removeItemsFromAThatAreListedInB(a:Array, b:Array )
{
    for ( var i=0 ; i< a.length ;i++)
    {

        for ( var j=0 ; j< b.length ; j++)
        {
            if ( (a[i]) == (b[j])  )
            {
                a.splice(i,1) 
            }

        }

    }


}
var a:Array=新数组(1,2,3,4,5,6,7,8);

var b:Array=new Array(6,7,8)/与接受的答案相同,您可以简化函数以使用
filter
indexOf

a = a.filter(function(item) {
    return b.indexOf(item) === -1;
});
这样做只会牺牲对IE8及以下版本的支持


下面是一个纯javascript示例:

您的实现需要O(n*m)时间,n=a.size,m=B.size。 如果首先对数组A进行排序(O(n*logn))并对数组A(O(m*logn))使用二进制搜索,则需要O(n*logn+m*logn),如果n>m,则需要O(n*logn):

对于O(n)解决方案而不是O(n*m),将B中的值放入对象中:

var i, o = {};
for (i = 0; i < b.length; i++) {
  o[b[i]] = 1;
}
for (i = a.length - 1; i >= 0; i--) {
  if (o.hasOwnProperty(a[i])) {
    a.splice(i,1) 
  }
}
vari,o={};
对于(i=0;i=0;i--){
if(o.hasOwnProperty(a[i])){
a、 拼接(i,1)
}
}
如果知道数组已排序,则可以并行循环:

var i = 0, j = 0;
var r = [];
while (i < a.length) {
  if (a[i] < b[j]) {
    r.push(a[i]);
    i++;
  } else {
    if (a[i] == b[j]) i++;
    j++;
  }
}
a = r;
var i=0,j=0;
var r=[];
while(i
这在动作脚本中有效吗

for (var pos,i=0, n=b.length;i<n;i++) {
  pos = a.indexOf(b[i]);
  if (pos!=-1) a.splice(pos,1);
}

for(var pos,i=0,n=b.length;i这些答案中的大多数看起来都是针对JavaScript的。由于粘贴的代码看起来是AS3,我想您可能需要这样的内容

尝试使用Array.indexOf而不是第二个循环

public function removeItemsFromAThatAreListedInB(a:Array, b:Array){
    for(var i:int = 0 ; i < b.length ; b++){ 
         var index:int = a.indexOf(b[i]); //returns -1 if the element is not found.
                                         //this method uses the strict equality to compare
         if(index != -1){         
            a.splice(index, 1); //remove the element from a
        }
    }

} 
公共函数删除列在b(a:数组,b:数组)中的文件{
对于(vari:int=0;i

要移除电流:

removeChild(a[i]); a.pop();
还是和b一起

removeChild(b[j]); b.pop();
pop();
是删除最后一个数组项的方法,然后您需要使用removeChild删除该项本身,还需要删除您给它的每个事件(
a.removeEventListener(event.ENTER_FRAME);
,等等

Pop通常用于子弹,当子弹击中敌人时,你会做两个循环

for(var i:int < bulletsarray.length; i++) {
for(var j:int < var enemynumber:int = 4; j++) {
if(bulletsarray[i].hitTestObject(enemyarray[j])) {
removeChild(bulletsarray[i]);
bulletsarray.pop();
removeChild(enemy_array[i]);
}
}
}
}
for(变量i:int
此代码是原始代码,可能需要进行一些编辑

for(var i:int < bulletsarray.length; i++) {
for(var j:int < var enemynumber:int = 4; j++) {
if(bulletsarray[i].hitTestObject(enemyarray[j])) {
removeChild(bulletsarray[i]);
bulletsarray.pop();
removeChild(enemy_array[i]);
}
}
}
}