Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.02.2014, 18:49
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

массивы с пустотами
Несколько вопросов про массивы.

1) Если я пишу:

var arr = [];
arr[1000] = 12;


Массив arr будет занимать место в памяти как массив с 1 элементом или он резервирует в памяти места под предыдущие элементы?

2) Перебор "дырявых" массивов.
Как лучше перебирать такие массивы, через "i in arr" или с помощью "forEach" будет лучше?

Пользоваться объектом в данном месте не удобно, так как массив будет не всегда дырявым и может быть очень большим. Вроде скорость работы с массивом много выше чем с объектом (но скорость через "i in arr" может быть та же что и у перебора объекта?)

Последний раз редактировалось tsigel, 04.02.2014 в 18:51.
Ответить с цитированием
  #2 (permalink)  
Старый 04.02.2014, 19:09
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus7
 
Регистрация: 08.01.2014
Сообщений: 354

1) будет занмиать как 1, ничего не резервируется, просто при обращении к ячейке, движок посмотрит что такого ключа у обьекта нет, и вернет undefined

2)
Сообщение от tsigel
Как лучше перебирать такие массивы
дырявых массивов не существует, массив это непрерывный паравозик с данными, просто абстрактно подразумевается что данные в вагончиках у тебя undefinet в каждом лежит, по этому перебирание таких массивов ни чем не отличается от перебирания обычных массивов. ты перебираешь массив и если значение тебя не устраивает то просто переходишь к следующему элементу массива, так что разницы между for и forEach нет


Сообщение от tsigel
но скорость через "i in arr" может быть та же что и у перебора объекта?
критична ли тебе скорость и что мешает замерить? совершенно не нужно делать скорость так где она не критична, во преки распространенному мнению новичков.

Последний раз редактировалось Maxmaxmaximus7, 04.02.2014 в 19:12.
Ответить с цитированием
  #3 (permalink)  
Старый 04.02.2014, 22:57
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

ну к сожалению в данном случае она как раз вполне критична.

Кстати я проверял что "forEach" проходит только по тем элементам, которые "есть". Например:

var arr = [];

arr[10] = 1; arr[20] = 2; arr[100] = 10;

arr.forEach(function (arrElem, index) {

   alert(index);

});
Ответить с цитированием
  #4 (permalink)  
Старый 04.02.2014, 23:37
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus7
 
Регистрация: 08.01.2014
Сообщений: 354

tsigel, оу, не знал, ну тогда используй его чо) по скорости, не смотря на то что это вызов функции, она не уступает for у, так как нативная и оптимизированная.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы изображений Sciti Общие вопросы Javascript 3 02.09.2013 18:58
Какие массивы бывают в Жабе thunder2 Общие вопросы Javascript 2 26.10.2011 23:28
Json и вложенные массивы ArmagedDance jQuery 6 08.06.2011 12:42
Массивы удаление элемента и вставка на его место другого mycoding Общие вопросы Javascript 1 19.04.2010 22:30
Массивы и функции.. Ну Я дуб! Элементы интерфейса 4 09.11.2009 20:36