按顺序获取JSON密钥

时间:2016-07-06 05:35:35

标签: javascript json

我在文件中有以下内容并读作

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等,顺序与输入文件相同。 我想知道我是否会按顺序得到它?

3 个答案:

答案 0 :(得分:2)

JavaScript中无法保证对象中的属性顺序;您需要使用Array来保留它。

来自ECMAScript Third Edition (pdf)的对象的定义:

  

4.3.3对象

     

一个对象是一个成员   类型对象。 这是一个无序的属性集合   包含原始值,对象或   功能。存储在a中的函数   对象的属性称为a   方法

自ECMAScript 2015 以来,使用the Map object可能是另一种选择。 MapObjectguarantees 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]);
})