Javascript对象多循环,顺序相同?

时间:2015-03-09 07:18:23

标签: javascript loops object

我知道,并非每个浏览器都会按照循环时添加的顺序输出对象项。 但是,如果我第二次循环访问某个对象,我能否确定它将以与以前相同的顺序输出项目,请记住,它们不能按照添加的顺序排列?

2 个答案:

答案 0 :(得分:2)

  

但如果我第二次循环一个物体,我能确定它会以与以前相同的顺序输出物品......

如果您以任何方式修改对象,则不会。即使你不这样做,那么你仍然依赖于未记录的行为,因为对于访问属性的顺序有没有保证,包括不保证它们将以后续的相同顺序被访问次。

如果您需要可靠的内容,请考虑使用Object.keyssort

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 :(得分:1)

不确定,我认为它会,但你可以确保它会这样做,如果你使用这样的排序键数组:

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

keys.forEach(function (key) {
  // Access the value
  myObject[key]
});