这是我目前正在做/正在努力实现我的目标。但它并没有像我希望的那样删除“行”。
所以,我正在创建一个对象,然后将其推入一个数组中。添加到数组部分工作正常,就像我期望的那样。
var nearProfileInfoObj:Object = new Object();
nearProfileInfoObj.type = "userInfo";
nearProfileInfoObj.dowhat = "add";
nearProfileInfoObj.userid = netConnection.nearID;
nearProfileInfoObj.username = username_input_txt.text;
nearProfileInfoObj.sex = sex_input_txt.selectedItem.toString();
nearProfileInfoObj.age = age_input_txt.selectedItem;
nearProfileInfoObj.location = location_input_txt.text;
nearProfileInfoObj.headline = headline_input_txt.text;
theArray.push(nearProfileInfoObj);
因此,之后我需要能够从数组中删除该对象,并且它不能按照我期望的方式工作。我想获取一个变量whoLeft并捕获它们的ID,然后在数组中查找该对象的userid部分中的特定ID,如果它在那里删除整个“行”。
我知道你可以使用数组集合进行过滤,但实际上并没有删除它。我需要删除它,因为我可能会在以后再次添加相同的值。
whoLeft = theiruserIDVariable;
theArray.filter(userLeaving);
public function userLeaving(element:*, index:int, arr:Array):Boolean
{
if (element.userid == whoLeft)
{
return false;
}
else
{
return true;
}
}
但这似乎并没有像它暗示的那样删除整行。有谁知道我做错了什么?
答案 0 :(得分:2)
filter
方法返回新筛选的数组,而不是修改原始数组。因此,您需要将返回的数组分配给theArray
。
试试这个
theArray = theArray.filter(userLeaving);
答案 1 :(得分:2)
编辑结果比循环慢:
手动编码循环的替代方法可能是这样的:
theArray.every(searchAndDestroy);
public function searchAndDestroy(element:*, index:int, arr:Array):Boolean
{
if (element.userid == whoLeft)
{
arr.splice(index,1);
return false;
}
return true;
}
据我所知,每次()都会在第一次测试函数返回false时终止。所以问题是:对于一个更大的列表,更快,for循环或每个()对测试函数调用的开销做的循环。
编辑#2 但是,对于我在一百万点阵列上运行的测试来说,这比for循环更快:
for each(var element:Object in theArray)
{
if (element.userid==whoLeft)
{
theArray.splice(theArray.indexOf(element),1);
break;
}
}
答案 2 :(得分:1)
我认为这就是你要找的东西:
for(var i:uint = 0, len:uint = theArray.length; i<len; i++)
{
if(thisArray[i].id == whoLeft.id)
{
thisArray.splice(i, 1);
break;
}
}
但是,你真的需要它在一个数组中,因为你总是可以使用一个字典,这意味着可以通过id访问它,这将更容易删除。