Просмотр полной версии : Правильно удалить элемент из массива
думаю простой вопрос----------------
Допустим есть массив, наполненый объектами.
Если я перебираю элементы через for each, то как из массива удалить нужный элемент(т.е. по сути не знаю индекс элемента)?
var myArray:Array = new Array();
for each (var obj:MyObject in myArray){
if (obj.value < 0){
/*--- как удалить этот элемент из массива ? ---*/
}
}
BlooDHounD
14.05.2010, 03:57
никак. перебирайте обычным for.
BlooDHounD
14.05.2010, 04:41
почему? это нормальное явление. вы хотите суперперебиатор оформляемый в 10 строчек?
medvedya2
14.05.2010, 07:36
var myArray:Array = new Array();
for each (var obj in myArray){
if (obj.value < 0){
myArray.splice(myArray.indexOf(obj),1);
}
}
BlooDHounD
14.05.2010, 16:12
medvedya2, "очень быстрый" алгоритм.
Кстати, забавно, но indexOf работает медленнее тупого перебора :)
var arr:Array = getArray(1000000);
var t:Number = new Date().getTime();
getElementIndexFast(arr, 111300);
trace('fast:', new Date().getTime()-t);
t = new Date().getTime();
getElementIndexSlow(arr, 111300);
trace('slow:', new Date().getTime()-t);
function getArray(count:int):Array {
var array:Array = [];
while(--count > 0) {
array.push(count);
}
return array;
}
function getElementIndexFast(array:Array, element:*):int {
var len:int = array.length;
for(var i:int = 0; i < len; i++) {
var el:* = array[i];
if(element === el) break;
}
return i;
}
function getElementIndexSlow(array:Array, element:*):int {
return array.indexOf(element);
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.