如何使“Object.keys”遵循键的顺序'已声明'在对象中

How to make `Object.keys` respect the order in which keys are 'declared' in an object?

本文关键字:声明 对象 顺序 Object 何使 keys      更新时间:2023-09-26

给定对象:

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

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

谢谢。

ECMA-262,关于for in语句的第12.6.4节:

没有指定枚举属性的机制和顺序(第一个算法中的步骤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将始终按插入顺序迭代键值对。

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

JavaScript是否保证对象属性顺序?