按顺序获取JSON键

5

我有以下内容存储在文件中并读取:

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) {

});

在每个循环中,我按照输入文件中的相同顺序获取名字、姓氏等信息。 我想知道是否总是按顺序获取这些信息?


2
我相信,你不能依赖那个顺序。哈希表不应该保留它。这只是幸运的实现。 - vp_arth
属性顺序是Javascript中的一个复杂主题。 - user6445533
3个回答

2
JavaScript 中对象中的属性顺序不能保证;需要使用一个 Array 来保存它。
来自 ECMAScript 第三版 (pdf) 的 Object 定义如下:

4.3.3 对象

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

自 ECMAScript 2015 起,使用 Map 对象可以作为一种替代方案。 MapObject 有一些相似之处,并且保证键的顺序:

Map 按插入顺序迭代其元素,而对象的迭代顺序没有指定。


其中 the Map objectguarantees the keys order 是链接。

0

是的,如果你想改变顺序,那么就需要对键进行排序或排列到一个单独的数组中,然后循环遍历重排后的数组。


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]);
})

3
我认为OP的意思是按照定义顺序排序,而不是为了排序而随意排序。 - Marty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接