如何使“Object.keys”遵循键的顺序'已声明'在对象中
How to make `Object.keys` respect the order in which keys are 'declared' in an object?
给定对象:
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是否保证对象属性顺序?
相关文章:
- 使用同一对象中的其他变量声明变量
- 如何在AngularJS工厂中正确声明对象属性
- 在JS中用引号声明对象和数组是否更快
- 什么'It是声明对象的最佳方式
- Javascript OOP - 声明对象的方法
- 在 JavaScript 中,在声明对象的新键:值对时,引用对象的变量名与使用“this”之间是否存在差异
- 声明对象超出范围
- 声明对象的两个语句之间的差异
- 在使用 Gulp 在 javascript 中声明对象时,在 Git bash 中出现以下错误“语法错误:意外标识符”
- 在处理.js中,如何声明对象类型和对象数组
- 声明对象并返回它的函数
- 数组中声明对象的函数未定义--NO!不是
- 函数调用以在JavaScript中声明对象属性
- 声明对象以在单个函数中重复使用的范围
- 丢失的在声明对象变量之前
- 不声明对象数组的Ng-repeat
- 应该在javascript中声明对象属性吗?
- 在nodejs/commonjs模块的根作用域中声明对象——用var还是不用var
- 在声明对象时访问属性
- 除了以下方式之外,是否有其他方法可以在 Javascript 中声明对象