Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   последовательность элементов в объекте (https://javascript.ru/forum/css-html/55149-posledovatelnost-ehlementov-v-obekte.html)

syegorius 15.04.2015 20:36

последовательность элементов в объекте
 
доброе время суток

столкнулся с такой проблемой в разных браузера элементы в объектах находятся в разных последовательностях

в мозиле они отображаются в той последовательности в которой я х туда добавил, а в хроме в алфавитном порядке.

подскажите возможно ли каким-то образом указать в всем браузерам что элементы объекта должны отображаться именно в том порядке в каком я их туда добавил?

заранее благодарен за помощь!

рони 15.04.2015 20:41

syegorius,
никак

Safort 15.04.2015 20:46

Нет. Но можно сделать грязный хак с использованием доп. переменной.

var obj = {};
var arr = [];

arr.push('key1');
obj['key1'] = 'значение';

arr.push('key2');
obj['key2'] = 'значение2';

arr.forEach(function(item) {
  console.log(obj[item]); // выводим по порядку элементы
});


или взять все ключи объекта в виде массива с помощью Object.keys(obj) и использовать https://developer.mozilla.org/ru/doc...cts/Array/sort со своим алгоритмом.

theKingOfJava 15.04.2015 20:48

syegorius,
легко
o={b: 1, a: 1}
for(i in o) console.log(i, o[i])

theKingOfJava 15.04.2015 20:54

рони,
Я сейчас в мозиле, и у меня работает. ЧЯДНТ?

рони 15.04.2015 20:56

theKingOfJava,
ок

theKingOfJava 15.04.2015 20:57

syegorius,
И, кстати,
Цитата:

Сообщение от syegorius
находятся

Цитата:

Сообщение от syegorius
отображаются

это сильно разные вещи. Не путайте.

syegorius 15.04.2015 20:58

очень странно...

да в хроме все выдало как мне хотелось бы...

значит хром выводит в алфавитном порядке числовые индексы

var o={30: 1, 1: 2}
for(i in o) console.log(i, o[i])


я просто не знаю как вставить кнопку запустить js

theKingOfJava 15.04.2015 21:01

Цитата:

Сообщение от syegorius
числовые индексы

Какие нахер числовые индексы, их нет в цикле for in. Там ключ/значение

рони 15.04.2015 21:01

Цитата:

Сообщение от syegorius
значит хром выводит в алфавитном порядке числовые индексы

ключи это строки -- и метод for(i in o) не подходит для вывода который бы
Цитата:

Сообщение от syegorius
что элементы объекта должны отображаться именно в том порядке в каком я их туда добавил?

смотрите код Safort,

рони 15.04.2015 21:03

theKingOfJava,
выводить по алфавиту не значит выводить попорядку 8 попугаев всегда больше 10

Safort 15.04.2015 21:04

Цитата:

Сообщение от syegorius (Сообщение 366861)
var o={30: 1, 1: 2}
for(i in o) console.log(i, o[i])

Не надо так. Это лишь вносит путаницу в код. Если нужны числовые индексы, то используй массив, а не объект.

syegorius 15.04.2015 21:04

ну я имел ввиду что индекс=ключ

theKingOfJava 15.04.2015 21:05

Цитата:

Сообщение от рони
не подходит

обоснуйте это.

theKingOfJava 15.04.2015 21:06

Цитата:

Сообщение от Safort
Это лишь вносит путаницу в код

какую путаницу?
Цитата:

Сообщение от Safort
нужны числовые индексы

Какие числовые индексы? Кому нужны? Ты о чем?

Safort 15.04.2015 21:06

Цитата:

Сообщение от theKingOfJava (Сообщение 366869)
обоснуйте это.

Так в вопросе ясно сказано: "элементы объекта должны отображаться именно в том порядке в каком я их туда добавил"

рони 15.04.2015 21:09

Цитата:

Сообщение от theKingOfJava
обоснуйте это.

o={10: 1, 8: 1}
for(i in o) console.log(i, o[i])

theKingOfJava 15.04.2015 21:09

Цитата:

Сообщение от рони
выводить по алфавиту не значит выводить попорядку 8 попугаев всегда больше 10

Я ничего не понял. ТС'у нужно не по алфавиту, а в порядке реального расположения в объекте. Причем тут алфавит? Алфавит- это уже синтетика отладчика, она к JS никакого отношения не имеет.

Safort 15.04.2015 21:09

theKingOfJava,
Цитата:

какую путаницу?
Обычную. Объект путают с массивом, а потом жалуются на глюки.

Цитата:

Какие числовые индексы? Кому нужны? Ты о чем?
Будь, пожалуйста, внимательнее. Я про это
Цитата:

Сообщение от syegorius (Сообщение 366861)
var o={30: 1, 1: 2}
for(i in o) console.log(i, o[i])


theKingOfJava 15.04.2015 21:09

Цитата:

Сообщение от Safort
Так в вопросе ясно сказано: "элементы объекта должны отображаться именно в том порядке в каком я их туда добавил"

И?

рони 15.04.2015 21:11

Цитата:

Сообщение от theKingOfJava
ТС'у нужно не по алфавиту, а в порядке реального расположения в объекте

смотрите пост 17 --- 8 будет при выводе раньше чем 10 -- а в обьекте всё наоборот

theKingOfJava 15.04.2015 21:12

Цитата:

Сообщение от Safort
Будь, пожалуйста, внимательнее. Я про это

Есть подозрение, что ты его ниасилил. Какие числовые индексы ты там нашел? Какие числовые индексы вообще могут быть в объекте/хеше? Ты чо мурзилок от крокфорда начитался? Может там монады еще водятся, lol?

theKingOfJava 15.04.2015 21:14

Цитата:

Сообщение от Safort
Объект путают с массивом

Вообще то, массив -- частный случай объекта. Я уж не знаю, кто там что путает. А строку с числом не путают обычно?

Safort 15.04.2015 21:15

Цитата:

Сообщение от theKingOfJava (Сообщение 366875)
И?

У автора браузеры по разному отображали список. Вот и всё.

Думаю, мы все привели достаточно примеров, чтобы автор выбрал нужное ему решение.

theKingOfJava 15.04.2015 21:18

Цитата:

Сообщение от рони
8 будет при выводе раньше чем 10 -- а в обьекте всё наоборот

А это что алфавит чтоли? И вообще, кто в объекте пользуется числовыми ключами?

theKingOfJava 15.04.2015 21:19

Safort,
Нет, ты говорил что-то там про for in

theKingOfJava 15.04.2015 21:25

Цитата:

Сообщение от Safort
отображали список

И какой кстати, список, это что структура данных такая новая, родом из лиспа? Автор вроде говорил про объект.

theKingOfJava 15.04.2015 21:33

рони,
То о чем ты говоришь, кстати, это вообще из другой оперы. Это, видимо, связано с вот этим.
o={1: 1, 0: 0, 2: 2, foo: "bar", length: 3}
;[].forEach.call(o, function(x){console.log(x)})

// ::: 0
// ::: 1
// ::: 2

o={1: 1, 0: 0, 2: 2, foo: "bar", length: 3}

for(i=0; i<o.length; i++) console.log(o[i])

// ::: 0
// ::: 1
// ::: 2

То есть, объекты сразу оптимизируются для использования в качестве массива. Неважно, в какой момент ты добавляешь св-во с числовым ключом, оно становиться сразу в соответствующую позицию. Так что, for in в любом случае, перечисляет в соответствии с реальным расположением элемента.


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