2010-04-25 2 views
0

Рассмотрим следующий код:Как лучше перебрать огромный массив с большим количеством неопределенных элементов

var _test1 = []; 
_test1[88] = 'sex'; 
_test1[1999990] = 'hey'; 
for(i = 0, length = _test1.length; i < length; i++){ 
    if(_test1[i] == 'hey'){ 
     alert(_test1.length); 
    } 
} 

это занимает много времени, и есть только два значения. Есть ли способ быть быстрее? Даже используя другую систему, которая индексирует объекты по числу, а затем быстро их зацикливает?

ответ

1

Вы пытались использовать объект вместо этого? Числа должны быть автоматически преобразованы в строки. Вы пройдете список с помощью цикла for ... in.

+0

Вам не нужно переключаться на объект. – SLaks

+0

есть. Я думаю, что это лучший вариант. объекты гораздо более тяжелые, чем массивы? –

+0

Массивы - объекты. – SLaks

3

Вы можете использовать for/in цикл:

for (var i in _test1) { 
    if (!_test1.hasOwnProperty(i) || isNaN(+i)) continue; 

    if(_test1[i] == 'hey'){ 
     alert(_test1.length); 
    } 
} 

Это именно то, что вы ищете; он будет только перебирать индексы, которые на самом деле определены, и пропускает любые дыры в массиве.

+0

спасибо за это решение, я буду тестировать позже: D –

Смежные вопросы