如何在 for 循环中访问 json 数组字段的名称

How can I access the name of the fields of a json array inside a for loop?

本文关键字:字段 数组 json 访问 for 循环      更新时间:2023-09-26

我的 Json 数组如下所示:

var data =
{
    "categories": 
    {
        "category1": 
        {
            "Name": "Maps",
             "Id": 3,
             "orderInList": 1
        },
        "category2": 
        {
            "Name": "Books",
            "Id": 2,
            "orderInList": 2
        }
    }
};

当我编写 do console.log(data) 时,对象的"键"格式如下:

|         key           |    value  |
categories[category1][Id]     "3"

如何在 for 循环中迭代它(不使用 JQuery 的 $.each),以便我可以分辨哪些键、值对是 Names、Id 或 orderInList?

工作中的杰斯菲德尔

这样的事情应该可以工作:

for (var category in data['categories']) {
    for (var key in data['categories'][category]) {
        var value = data['categories'][category][key];
        // Now do whatever you want based on key...
        switch (key) {
           case 'Name':
              // Whatever
              break;
           default:
              break;
        }
    }
}
在任何情况下,内部循环中的键和值将保存

嵌套对象的键和值,而类别将保存类别。

关于这一点的潜在令人困惑的事情是,对象属性可以像Javascript中的数组值一样访问。

因此,请考虑以下代码:

var some_object = {
    a: 0
};
// These two lines do the same thing, even though some_object is not an array.
some_object.a = 1;
some_object['a'] = 1;

外部categories对象是包含许多子对象的对象。可以使用 for...in 循环循环访问这些子对象。

for (var category in data.categories) {
    // here you can access `category.Name`, `.Id`, and `.orderInList`
}

看看这个

var data = {
  "categories": {
    "category1": {
        "Name": "Maps",
        "Id": 3,
        "orderInList": 1
    },
    "category2": {
        "Name": "Books",
        "Id": 2,
        "orderInList": 2
    }
  }
};
function represent(obj) {
  var reprs = [];
  for (var key in obj) {
    if(!obj.hasOwnProperty(key)) continue;
    if (obj[key] instanceof Object) {
        var result = represent(obj[key]);
        for (var i = 0; i < result.length; i++) {
            reprs.push("[" + key + "]" + result[i]);
        }
    }
    else {
        reprs.push("[" + key + "] = " + obj[key]);
    }
  }
  return reprs;
}
console.log(represent(data));
//output
["[categories][category1][Name] = Maps",
 "[categories][category1][Id] = 3",
 "[categories][category1][orderInList] = 1",
 "[categories][category2][Name] = Books",
 "[categories][category2][Id] = 2",
 "[categories][category2][orderInList] = 2"]

哪些键、值对是 Names、Id 或 orderInList?

我认为您可以在递归终止条件中添加代码以检查密钥是否等于 Names IdorderInList