【问题标题】:Iterating through javascript array using ranged for loop使用 ranged for 循环遍历 javascript 数组
【发布时间】:2017-10-02 15:14:32
【问题描述】:

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

由于某种原因,当我尝试使用范围 for 循环遍历对象时,每个对象都是未定义的,但是当我使用常规 for 循环遍历对象并使用方括号中的当前迭代值索引对象时,我可以访问每个子对象(即,这有效for(var i = 0; i < jsonObj.length; i++) 与此for(var sub in jsonObj)为什么在这种情况下范围 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"])
}

【问题讨论】:

  • 尝试for(var sub of jsonObj) in 没有达到您的预期 -> A different property name is assigned to variable on each iteration. 所以第一个元素的属性名称是 0,因为这就是数组。
  • @Keith 请参考 OP。
  • 请告诉我们你尝试了什么。
  • 你如何在 for 循环中调用每个 jsonObj?
  • @loremIpsum1771 请原谅?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的 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 是对象数组,而不是对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2016-01-31
      • 2021-11-16
      • 2015-07-09
      • 1970-01-01
      相关资源
      最近更新 更多