Как лучше перебрать огромный массив с множеством неопределенных элементов - PullRequest
0 голосов
/ 25 апреля 2010

Рассмотрим следующий код:

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

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

Ответы [ 2 ]

3 голосов
/ 25 апреля 2010

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

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

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

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

1 голос
/ 25 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...