Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   ie9 начал сам сортировать массивы (https://javascript.ru/forum/css-html-internet-explorer/23191-ie9-nachal-sam-sortirovat-massivy.html)

Polkan 15.11.2011 17:36

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 )?

Aetae 15.11.2011 17:50

1. У вас не массив а хэш.
2. Порядок ключей в хэше не гарантирован и может быть произволен.

Polkan 15.11.2011 17:54

хорошо, пусть Хеш.
Проблема в том, что IE до 9 версии его не сортировали, а новый - сортирует. Можно ли это как-то предотвратить?

Polkan 15.11.2011 17:58

Aetae,
т.е. как бы получается, что ваше второе утверждение для новых ie, хром и оперы неверно - порядок непроизволен.

Aetae 15.11.2011 17:58

Цитата:

Сообщение от Polkan (Сообщение 136716)
хорошо, пусть Хеш.
Проблема в том, что IE до 9 версии его не сортировали, а новый - сортирует. Можно ли это как-то предотвратить?

Нельзя. Есщё раз говорю: не зависимо от версии порядок не гарантирован. И в более ранних версиях внезапно могут всплыть несоответствия. Поэтому так делать нельзя. Совем нельзя. Ни в каких версиях никаких браузеров.
Цитата:

Сообщение от Polkan (Сообщение 136720)
Aetae,
т.е. как бы получается, что ваше второе утверждение для новых ie, хром и оперы неверно - порядок непроизволен.

Я не говорил произовлен, я говорил не гарантирован. Т.е. любой какой взбредёт в голову и покажется менее ресурсоёмким разрабам текущего билда.)

Polkan 15.11.2011 18:12

Цитата:

Сообщение от Aetae (Сообщение 136721)
Я не говорил произовлен, я говорил не гарантирован. Т.е. любой какой взбредёт в голову и покажется менее ресурсоёмким разрабам текущего билда.)

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

Если такое использование хэшей категорически неправильное, может быть порекомендуете какие-то рабочие методы?

Aetae 15.11.2011 18:18

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

Цитата:

И проблемы с ним до сих пор не было
Ничего, зато сейчас... *злобный хохот*

Polkan 15.11.2011 18:21

задача-то простая )
выбирать их хеша
arr['555'] = "Первый";
arr['777'] = "Второй";
arr['666'] = "Третий";
элементы в том порядке, в котором они объявлялись

Pavel M. 15.11.2011 18:23

Цитата:

Сообщение от 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 + '; ');
    }

Polkan 16.11.2011 12:23

Pavel M.,
спасибо, то что нужно!


Часовой пояс GMT +3, время: 22:58.