循环遍历 JSON 数组会给出“未定义”的结果 [重复]

Posted

技术标签:

【中文标题】循环遍历 JSON 数组会给出“未定义”的结果 [重复]【英文标题】:Looping through a JSON Array gives "undefined" results [duplicate] 【发布时间】:2016-01-31 11:36:26 【问题描述】:

我从 AJAX 解析了一个 JSON 字符串(在 response var 中):

JSON


   "TheArray":[  
        
         "AlmostThere":   
            "whatWeAreLookingFor":"Hello"
         
      ,
      
        "AlmostThere": 
            "whatWeAreLookingFor":"Goodbye"
        
      
   ]

正在解析的 JSON

var jsonData = JSON.parse(response); //response is the string version of the JSON code!

现在,我需要循环进入 JSON 数组,这里称为TheArray。我这样做:

循环数组

for (var contents in jsonData["TheArray"]) 


在里面,我们得到whatWeAreLookingFor元素的值:

for (var contents in jsonData["TheArray"]) 
    console.log(contents.whatWeAreLookingFor + "!");

但是有一个问题!控制台输出... undefined!。 - 我尝试了多种方法来完成这项工作,例如使用contents["whatWeAreLookingFor"] 等等,但我仍然得到相同的结果。

【问题讨论】:

Don't use for... in for looping over Arrays - 如果可以使用 ES6,请使用常规的 for 循环、forEachfor... of 提示:在你的循环中记录contents。这不会是你所期望的。 for (var contents in jsonData.TheArray) console.log(jsonData.TheArray[contents].AlmostThere.whatWeAreLookingFor + "!"); 【参考方案1】:

您忘记访问AlmostThere

  jsonData.TheArray[i].AlmostThere.whatWeAreLookingFor

for (var i = 0; i < jsonData.TheArray.length; i++) 
    console.log(jsonData.TheArray[i].AlmostThere.whatWeAreLookingFor);

【讨论】:

【参考方案2】:

如果你以你的方式循环你的数组TheArraycontents var 将变成这两个对象:

  
     "AlmostThere":   
        "whatWeAreLookingFor":"Hello"
     


    "AlmostThere": 
        "whatWeAreLookingFor":"Goodbye"
    

现在您想使用

访问该值

contents.whatWeAreLookingFor

但是这些对象的这个属性是未定义的。所以你的控制台记录undefined。您必须通过以下方式访问该值:

contents.AlmostThere.whatWeAreLookingFor

所以你得到对象AlmostThere并选择属性whatWeAreLookingFor

如果您使用 jquery,您应该使用:

$.each(jsonData.TheArray, function() 
     console.log(contents.AlmostThere.whatWeAreLookingFor + '!');
);

API:http://api.jquery.com/jquery.each/

【讨论】:

【参考方案3】:

for... in 迭代对象的。对于数组,这意味着 (approximately) 索引 012 等。

您可以改用 Array.prototype.forEach:

jsonData.theArray.forEach(function(contents) 
  console.log(contents.AlmostThere.whatWerAreLookingFor);
)

【讨论】:

以上是关于循环遍历 JSON 数组会给出“未定义”的结果 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

未定义的索引:当我在 laravel 中显示通知 json 数组时的用户

循环遍历数组并删除项目,而不会中断 for 循环

js的Dom对象集合循环遍历过程中数组长度发生变化,小白不懂,求大神指教

循环遍历数组会返回不同的 SQL 结果,具体取决于代码

怎样用for循环动态遍历json数组

从数组中删除未定义的值