PDA

Просмотр полной версии : Правильно удалить элемент из массива


cpu
14.05.2010, 03:10
думаю простой вопрос----------------
Допустим есть массив, наполненый объектами.
Если я перебираю элементы через 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.

cpu
14.05.2010, 04:05
грустно

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, "очень быстрый" алгоритм.

Obi
14.05.2010, 16:58
Кстати, забавно, но 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);
}