如何使'Object.keys`尊重声明键的顺序'在一个对象?

时间:2015-05-28 06:22:28

标签: javascript

鉴于对象:

var opts = {
    'all': 'All',
    0: 'Some option',
    1: 'Cookies',
};

Object.keys(opts) 会返回此信息:

["0", "1", "all"]

我期待这一点:

["all", "0", "1"] // The order in which the keys are 'declared' in the obj

如何按照它们在对象中出现的顺序迭代属性?

感谢。

2 个答案:

答案 0 :(得分:2)

ECMA-262, section 12.6.4关于for-in声明:

  

未指定枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)。

您可以改为使用数组:

var opts = [
    {key: 'all', value: 'All'},
    {key: 0,     value: 'Some option'},
    {key: 1,     value: 'Cookies'}
];

或者,在ES6中,Map对象:

var opts = new Map([
    ['all', 'All'],
    [0,     'Some option'],
    [1,     'Cookies']
]);

opts.forEach(function(val, key) {
    console.log(key, val);
});

在这种情况下,forEach将始终按插入顺序迭代键值对。

答案 1 :(得分:0)

不,在JavaScript中不保证对象中的属性顺序,您需要使用数组。

Does JavaScript Guarantee Object Property Order?