2015-03-09 2 views
0

Я знаю, что не каждый браузер будет выводить объекты объекта в том порядке, в котором они были добавлены при прохождении. Но если я повторю второй объект, могу ли я быть уверен, что он выведет элементы в том же порядке, что и раньше, имея в виду, что он не должен быть в порядке по мере добавления?Объект множественного цикла Javascript, тот же порядок?

+0

Вы уверены, что нашли ошибку? _ ни один браузер не будет выводить объекты объекта в том порядке, в котором они были добавлены при прохождении через_ – halafi

+0

@halafi: нет гарантии о том, что 'for-in' итерирует имена свойств вообще. –

ответ

2

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

Нет, если вы изменяете объект в так или иначе. И даже если вы этого не сделаете, вы полагаетесь на недокументированное поведение, так как есть no гарантирует, что заказ будет посещен, в том числе нет гарантии, что они будут посещены в том же порядке в последующие времена.

Если вам нужно что-то надежное, рассмотреть вопрос об использовании Object.keys и sort:

Object.keys(theObject).sort().forEach(function(key) { 
    // The order here will reliably be alphabetical 
}); 

Обратите внимание, что Object.keys во всех современных браузерах, но не в старых, как IE8. Однако он может быть легко заполнен.

Живой пример:

var obj1 = {}; 
 
obj1.a = 1; 
 
obj1.b = 2; 
 
obj1.c = 3; 
 
Object.keys(obj1).sort().forEach(function(key) { 
 
    snippet.log(key); 
 
}); 
 

 
var obj2 = {}; 
 
obj2.c = 3; 
 
obj2.b = 2; 
 
obj2.a = 1; 
 
Object.keys(obj2).sort().forEach(function(key) { 
 
    snippet.log(key); 
 
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+1

Хорошо, я думаю, что я буду использовать что-то вроде этого, чтобы обеспечить правильный порядок предметов. Благодаря! – Harderer

1

Не уверен, я думаю, что это будет, но вы можете убедиться, что он будет делать, если вы используете отсортированный ключи массива следующим образом:

var keys = Object.keys(myObject).sort(); 

keys.forEach(function (key) { 
    // Access the value 
    myObject[key] 
}); 
Смежные вопросы