如何遍历JavaScript数组/对象

3
我正在努力从这个数组中获取我的数据,但是很难。请问有人能告诉我如何做到这一点吗?
我需要从locations中获取latLngAdminArea4以供自动完成使用。
请问有人能解释一下{}[]之间的区别吗?据我所知,一个是数组,另一个是对象,但我不确定这是否正确。遍历数组和对象的过程是否不同?
{
   "results": [
      {
         "locations": [
            {
               "latLng": {
                  "lng": 24.873108,
                  "lat": 59.389755
               },
               "adminArea4": "Harju maakond",
               "adminArea5Type": "City",
               "adminArea4Type": "County",
               "adminArea5": "Rae vald",
               "street": "",
               "adminArea1": "EE",
               "adminArea3": "",
               "type": "s",
               "displayLatLng": {
                  "lng": 24.873108,
                  "lat": 59.389755
               },
               "linkId": 0,
               "postalCode": "",
               "sideOfStreet": "N",
               "dragPoint": false,
               "adminArea1Type": "Country",
               "geocodeQuality": "CITY",
               "geocodeQualityCode": "A5XXX",
               "adminArea3Type": "State"
            },
            {
               "latLng": {
                  "lng": 24.860184,
                  "lat": 59.38493
               },
               "adminArea4": "Harju maakond",
               "adminArea5Type": "City",
               "adminArea4Type": "County",
               "adminArea5": "Rae",
               "street": "",
               "adminArea1": "EE",
               "adminArea3": "",
               "type": "s",
               "displayLatLng": {
                  "lng": 24.860184,
                  "lat": 59.38493
               },
               "linkId": 0,
               "postalCode": "",
               "sideOfStreet": "N",
               "dragPoint": false,
               "adminArea1Type": "Country",
               "geocodeQuality": "CITY",
               "geocodeQualityCode": "A5XXX",
               "adminArea3Type": "State"
            },
         ]
      }
   ]
}

1
又一个“如何使用JavaScript解析JSON对象”的教程...唉。 - Raptor
1
可能是重复的问题:如何在 JavaScript 中解析 JSON 并获取值 - Raptor
这是一个数组还是一个对象?我真的很想了解如何解析它。 - NaN
2个回答

4

首先解释一下数组和对象,因为您已经提出了问题,这与如何使用您拥有的数据结构非常相关:

{} 定义一个对象。 [] 定义一个数组。

对象是无序属性/值对列表,没有重复的属性名。

数组是一个有序的个体列表,具有告诉您数组中有多少项的 .length 属性。


对象将被定义为:

var obj = {
   prop1: value1,
   prop2: value2
};

而且,你可以像这样引用值:
console.log(obj.prop1);    // value1

数组的定义如下:

var myArray = ["one", "two", "three"];

另外,你可以通过零索引来访问元素,如下所示:

console.log(myArray[0]);   // "one"

或者,您可以像这样遍历数组中的所有项:

for (var i = 0; i < myArray.length; i++) {
    console.log(myArray[i]);
}

假设你的整体数据结构存储在一个名为 data 的变量中,你可以按照以下方式迭代结果和嵌套的位置数组:

假设您的整体数据结构存储在一个名为 data 的变量中,您可以按照以下方式迭代结果和嵌套的位置数组:

var results = data.results;
var locations;
for (var j = 0; j < results.length; j++) {
    locations = results[j].locations;
    for (var i = 0; i < locations.length; i++) {
       console.log(locations[i].latLng);
       console.log(locations[i].adminArea4);
    }

解释如下:

  1. data.results 是一个需要迭代的数组。
  2. 在该数组的每个元素中都有一个带有位置属性的对象。
  3. 位置属性是另一个需要迭代的数组。
  4. 在每个位置数组的元素中都有一个带有 latLng 属性和 adminArea4 属性的对象。

@NaN - 是的,那是我的回答中的一个打字错误。results[i] 应该是 results[j]。回答已经纠正了。 - jfriend00
感谢您的编辑。现在似乎给了我更多的信息。如果我想要访问lat的实际值,我可以简单地使用locations[i].latLng.lat吗?另外,请告诉我如果我使用parseJSON函数是否还需要for循环。谢谢。 - NaN
好的,感谢你在这里的解释,jsfriend。你能告诉我为什么对象和数组会混用吗?为什么不只使用其中一个呢? - NaN
@NaN - 这个数据结构包含了数据的列表,每个数据都有多个命名属性。为了表示这一点,通常会使用对象数组。在这里,你有一个比正常情况更复杂的结构,因为你有一个结果数组,而每个结果本身又包含一个对象数组。幸运的是,它们通常不会这么复杂,很容易进行导航。如果你只想要一个随机数列表,你只需要使用一个单独的数组来保存这些数字。如果你只想要一个带有多个不同命名属性的单个对象,你只需要使用一个对象即可。 - jfriend00
非常感谢你出色的解释,jfriend00。这确实有道理。所以拥有一个对象数组是合乎逻辑的。我也很高兴听到这个例子并不常见。我一直对数组感到困惑,所以这是个好消息。再次感谢你的帮助和出色的解释! - NaN
显示剩余2条评论

1
这是json结构。您可以像下面提到的那样访问元素。将json分配给变量,然后访问对象属性。
var obj = {
   "results": [
      {
         "locations": [
            {
               "latLng": {
                  "lng": 24.873108,
                  "lat": 59.389755
               },
               "adminArea4": "Harju maakond",
               "adminArea5Type": "City",
               "adminArea4Type": "County",
               "adminArea5": "Rae vald",
               "street": "",
               "adminArea1": "EE",
               "adminArea3": "",
               "type": "s",
               "displayLatLng": {
                  "lng": 24.873108,
                  "lat": 59.389755
               },
               "linkId": 0,
               "postalCode": "",
               "sideOfStreet": "N",
               "dragPoint": false,
               "adminArea1Type": "Country",
               "geocodeQuality": "CITY",
               "geocodeQualityCode": "A5XXX",
               "adminArea3Type": "State"
            },
            {
               "latLng": {
                  "lng": 24.860184,
                  "lat": 59.38493
               },
               "adminArea4": "Harju maakond",
               "adminArea5Type": "City",
               "adminArea4Type": "County",
               "adminArea5": "Rae",
               "street": "",
               "adminArea1": "EE",
               "adminArea3": "",
               "type": "s",
               "displayLatLng": {
                  "lng": 24.860184,
                  "lat": 59.38493
               },
               "linkId": 0,
               "postalCode": "",
               "sideOfStreet": "N",
               "dragPoint": false,
               "adminArea1Type": "Country",
               "geocodeQuality": "CITY",
               "geocodeQualityCode": "A5XXX",
               "adminArea3Type": "State"
            },
         ]
      }
   ]
};

Travsering Values

obj.results[0].locations[0].latLng.lng
obj.results[0].locations[0].latLng.lat

你也可以使用for循环来遍历。

谢谢razahassank。我的数据是从服务器返回的,所以我可以将从服务器返回的内容赋值给一个变量吗? - NaN
最好使用jQuery来解析它。例如,var obj = $.parseJSON(serverResponse); - razahassank
locations数组中有多个位置,可能在results数组中也有多个结果。这只获取一个硬编码的位置 - 跳过其他存在的位置。 - jfriend00
@razahassank,感谢你的函数。从这个错误信息中我得到的是SyntaxError: JSON.parse: 在JSON数据的第1行第2列处出现了意外字符 - NaN
谢谢提供链接。我刚刚通过验证器运行了JSON,它显示为“有效的JSON”。 - NaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接