我在文件中有以下内容并读作
var input = require("./mydata.json");
"User": {
"properties": {
"firstName": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"lastName": {
"type": "string",
"maxLength": 50
},
"middleName": {
"type": "string"
},
"title": {
"type": "string"
},
"language": {
"type": "string",
"default": "en-US"
}
}
}
我使用以下代码循环键
var item = _.get(input, 'User');
var properties = item.properties;
var allKeys = _.keys(properties);
_.each(allKeys, function(key) {
});
在每个循环中,我得到firstname,lastname等,顺序与输入文件相同。 我想知道我是否会按顺序得到它?
答案 0 :(得分:2)
JavaScript中无法保证对象中的属性顺序;您需要使用Array
来保留它。
来自ECMAScript Third Edition (pdf)的对象的定义:
4.3.3对象
一个对象是一个成员 类型对象。 这是一个无序的属性集合 包含原始值,对象或 功能。存储在a中的函数 对象的属性称为a 方法
自ECMAScript 2015 以来,使用the Map
object可能是另一种选择。 Map
与Object
和guarantees the keys order分享一些相似之处:
Map以插入顺序迭代其元素,而没有为Objects指定迭代顺序。
答案 1 :(得分:0)
是的,如果您想更改顺序,则需要在单独的数组中对键进行排序或排列,然后在重新排列的数组上循环。
答案 2 :(得分:0)
Object.keys(input.User).sort();
// Will return all keys in sorted array.
然后,如果您想要按照该顺序读取每个键的值,只需遍历该数组:
Object.keys(input.User).sort().forEach((key,index)=>{
console.log('key :'+key+' , value :'+input.User[key]);
})