Javascript:遍历数组内的对象

时间:2018-12-31 03:12:48

标签: javascript arrays json javascript-objects

我有一个JSON feed,我需要从其中提取一些信息以在地图上绘制一些标记。为此,我需要遍历JSON feed,然后遍历数组中的特定对象。

我可以让它遍历顶层(类别),但是尝试遍历每个类别都可以按预期方式工作-我得到的相同类别重复了等于数字类别。

数组/对象的结构如下:

- activities
    |_ category
    |_ acf
        |_ activity_listing
            |_ name
            |_ latitude
            |_ longitude
            |_ name
            |_ latitude
            |_ longitude
    |_ category
    |_ acf
        |_ activity_listing
            |_ name
            |_ latitude
            |_ longitude
            |_ name
            |_ latitude
            |_ longitude

每个类别都有一个活动列表,其中包含多个项目(名称,经度,长度)。

我的代码设置如下:

var activitiesLocationList = this.activitiesLocations;

for (var i = 0; i < activitiesLocationList.length; i++) {

    activitiesLocationList[0]['acf']['activity_listing'].forEach(function(item) {

        var placeName = item['activity_listing-name'];
        var placeLatitude = parseFloat(item['activity-listing_latitude']);
        var placeLongitude = parseFloat(item['activity-listing_longitude']);

        console.log('Place Name: ' + placeName);

    })
}

输出为:

'Place Name: Karijini National Park'
'Place Name: Staircase to the Moon'
'Place Name: Millstream Chichester National Park'
'Place Name: Dampier Archipelago'
'Place Name: Murujuga National Park'
'Place Name: Montebello Islands'
'Place Name: Karijini National Park'
'Place Name: Staircase to the Moon'
'Place Name: Millstream Chichester National Park'
'Place Name: Dampier Archipelago'
'Place Name: Murujuga National Park'
'Place Name: Montebello Islands'

所以它几乎可以满足我的要求,但是只进入了第一类。我在做什么错了?

如何让它逐步遍历每个类别,使内容不断循环播放?

4 个答案:

答案 0 :(得分:1)

在此行i中循环时,您必须传递索引0而不是activitiesLocationList[i]['acf']['activity_listing']....

答案 1 :(得分:1)

仅当您遍历对象时,您实际上才访问第0个索引。将activitiesLocationList[0]['acf']['activity_listing']替换为activitiesLocationList[i]['acf']['activity_listing']。因此,您的完整代码将如下所示

var activitiesLocationList = this.activitiesLocations;

for (var i = 0; i < activitiesLocationList.length; i++) {

    activitiesLocationList[i]['acf']['activity_listing'].forEach(function(item) {

        var placeName = item['activity_listing-name'];
        var placeLatitude = parseFloat(item['activity-listing_latitude']);
        var placeLongitude = parseFloat(item['activity-listing_longitude']);

        console.log('Place Name: ' + placeName);

    })
}

答案 2 :(得分:1)

我认为由于代码activitiesLocationList[0]的这一部分,您将始终获得第一个对象。
可以将其更改为activitiesLocationList[i]以获取每个对象数据,然后就可以了。

答案 3 :(得分:1)

使用activityLocationList [i]而不是activityLocationList [0]:

for (var i = 0; i < activitiesLocationList.length; i++) {

    activitiesLocationList[0]['acf']['activity_listing'].forEach(function(item) {

        var placeName = item['activity_listing-name'];
        var placeLatitude = parseFloat(item['activity-listing_latitude']);
        var placeLongitude = parseFloat(item['activity-listing_longitude']);

        console.log('Place Name: ' + placeName);

    })
}