0

我的 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),以便我可以判断哪些键、值对是名称、ID 或 orderInList?

工作 Jsfiddle

4

3 回答 3

1

像这样的东西应该工作:

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;
于 2012-08-13T13:18:26.837 回答
1

您的外部categories对象是一个包含许多子对象的对象。您可以使用循环遍历这些子对象for...in

for (var category in data.categories) {
    // here you can access `category.Name`, `.Id`, and `.orderInList`
}
于 2012-08-13T13:17:21.800 回答
0

签出这个

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

于 2012-08-13T13:32:35.860 回答