使用ranged for循环遍历javascript数组

时间:2017-10-02 15:14:32

标签: javascript c# json asp.net-mvc

我有一个MVC应用程序,其中控制器获取对象列表,使用JavaScriptSerializer()将其序列化,创建一个传递给客户端视图的JSON对象。

出于某种原因,当我尝试使用ranged for循环遍历对象时,每个对象都是未定义的,但是当我使用常规for循环遍历对象并使用方括号中的当前迭代值索引对象时,我可以访问每个子对象(即这对for(var i = 0; i < jsonObj.length; i++)for(var sub in jsonObj)对比。为什么在这个实例中,ranged for循环不起作用?

JSON对象:

[
    "Obj1": {
            "Value1": "3454234",
            "Value2": "345643564",
            "Value3": "665445",
            "Value4": "True"
        },
        "Obj2": {
            "Value1": "3454234",
            "Value2": "345643564",
            "Value3": "665445",
            "Value4": "True"
        },
        "Obj3": {
            "Value1": "3454234",
            "Value2": "345643564",
            "Value3": "665445",
            "Value4": "True"
        }
]

修改

for(var sub in finalJson){
  console.log(sub["Value1"])
}

2 个答案:

答案 0 :(得分:0)

您的JSON无效,您需要删除对象名称,因此它是有效列表:

[{
   "Value1": "3454234",
   "Value2": "345643564",
   "Value3": "665445",
   "Value4": "True"
 }, {
   "Value1": "3454234",
   "Value2": "345643564",
   "Value3": "665445",
   "Value4": "True"
 } {
   "Value1": "3454234",
   "Value2": "345643564",
   "Value3": "665445",
   "Value4": "True"
 }]

在这种情况下,远程循环将起作用:

JsonObj.forEach(function(obj) {
   console.log(obj);
})

或将其转换为包含其他对象作为属性的对象:

{
  "Obj1": {
    "Value1": "3454234",
    "Value2": "345643564",
    "Value3": "665445",
    "Value4": "True"
  },
  "Obj2": {
    "Value1": "3454234",
    "Value2": "345643564",
    "Value3": "665445",
    "Value4": "True"
  },
  "Obj3": {
    "Value1": "3454234",
    "Value2": "345643564",
    "Value3": "665445",
    "Value4": "True"
  }
}

在这种情况下,你可以通过键循环:

for(var key in JsonObj) {
   console.log(key);
}

你的第二个循环不起作用的原因是因为for..in用于迭代对象键,但你的JSON是一个对象数组,而不是一个对象

答案 1 :(得分:0)

您提供的JSON对象不是正确的JSON对象。它是一组键值对。正确的JSON对象必须被{...}包围,而不是[...]。您可以检查变量类型jsonObj instanceof Array;如果它得到true - 那就是原因。