Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.11.2011, 17:36
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

ie9 начал сам сортировать массивы
Здравствуйте.
Не знаю с чем это связано, но с недавнего времени изменилось поведение for( in ) в IE.
вот код
var arr = new Array();
arr['555'] = "Первый";
arr['777'] = "Второй";
arr['666'] = "Третий";
	for (var i in arr) {
		alert(i + ':' + arr[i] + '; ');
	}

который в Firefox и Seamonkey, как и раньше (и как в предыдущих IE) выводит:
555:Первый
777:Второй
666:Третий

в новых же IE9, Хроме и Опере вывод такой:
555:Первый
666:Третий
777:Второй

т.е. массив отсортирован по ключам, а мне это совершенно ни к чему.

Подскажите, плз, можно ли как-то предотвратить эту автосортировку для for( in )?
Ответить с цитированием
  #2 (permalink)  
Старый 15.11.2011, 17:50
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

1. У вас не массив а хэш.
2. Порядок ключей в хэше не гарантирован и может быть произволен.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 15.11.2011, 17:54
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

хорошо, пусть Хеш.
Проблема в том, что IE до 9 версии его не сортировали, а новый - сортирует. Можно ли это как-то предотвратить?
Ответить с цитированием
  #4 (permalink)  
Старый 15.11.2011, 17:58
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

Aetae,
т.е. как бы получается, что ваше второе утверждение для новых ie, хром и оперы неверно - порядок непроизволен.
Ответить с цитированием
  #5 (permalink)  
Старый 15.11.2011, 17:58
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Сообщение от Polkan Посмотреть сообщение
хорошо, пусть Хеш.
Проблема в том, что IE до 9 версии его не сортировали, а новый - сортирует. Можно ли это как-то предотвратить?
Нельзя. Есщё раз говорю: не зависимо от версии порядок не гарантирован. И в более ранних версиях внезапно могут всплыть несоответствия. Поэтому так делать нельзя. Совем нельзя. Ни в каких версиях никаких браузеров.
Сообщение от Polkan Посмотреть сообщение
Aetae,
т.е. как бы получается, что ваше второе утверждение для новых ie, хром и оперы неверно - порядок непроизволен.
Я не говорил произовлен, я говорил не гарантирован. Т.е. любой какой взбредёт в голову и покажется менее ресурсоёмким разрабам текущего билда.)
__________________
29375, 35

Последний раз редактировалось Aetae, 15.11.2011 в 18:01.
Ответить с цитированием
  #6 (permalink)  
Старый 15.11.2011, 18:12
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

Сообщение от Aetae Посмотреть сообщение
Я не говорил произовлен, я говорил не гарантирован. Т.е. любой какой взбредёт в голову и покажется менее ресурсоёмким разрабам текущего билда.)
Просто дело в том, что этот код я использовал в админке, на которой работает штук 10 сайтов. Некоторые уже около 7 лет. И проблемы с ним до сих пор не было. Т.е. ее невозможно было не заметить.

Если такое использование хэшей категорически неправильное, может быть порекомендуете какие-то рабочие методы?
Ответить с цитированием
  #7 (permalink)  
Старый 15.11.2011, 18:18
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Методы зависят от задачи.

Цитата:
И проблемы с ним до сих пор не было
Ничего, зато сейчас... *злобный хохот*
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 15.11.2011, 18:21
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

задача-то простая )
выбирать их хеша
arr['555'] = "Первый";
arr['777'] = "Второй";
arr['666'] = "Третий";
элементы в том порядке, в котором они объявлялись
Ответить с цитированием
  #9 (permalink)  
Старый 15.11.2011, 18:23
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от Polkan
Если такое использование хэшей категорически неправильное, может быть порекомендуете какие-то рабочие методы?
используйте массив
var arr = [
      {id: '555', name: 'Первый'},
      {id: '777', name: 'Второй'},
      {id: '666', name: 'Третий'}
    ],
    i,
    len;

    for (i = 0, len = arr.length; i < len; i += 1) {
        alert(arr[i].id + ':' + arr[i].name + '; ');
    }
Ответить с цитированием
  #10 (permalink)  
Старый 16.11.2011, 12:23
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

Pavel M.,
спасибо, то что нужно!
Ответить с цитированием
Ответ



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

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