Javascript: цикл по объекту в массиве - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть канал JSON, из которого мне нужно извлечь некоторую информацию, чтобы нанести несколько маркеров на карту.Для этого мне нужно пройти по каналу JSON, а затем пройти по определенному объекту в массиве.

Я могу заставить его проходить по верхнему уровню (категории), но пытаясь пройти по каждомукатегория работает, как и ожидалось - я получаю одну и ту же категрию, повторяемую в количестве категорий.

Структура массива / объекта выглядит следующим образом:

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

Каждая категория имеет список действийс несколькими элементами (name, lat, lng).

Мой код настроен, как показано ниже:

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 голосов
/ 31 декабря 2018

Использовать actionsLocationList [i] вместо actionsLocationList [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);

    })
}
0 голосов
/ 31 декабря 2018

Вы фактически получаете доступ к 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);

    })
}
0 голосов
/ 31 декабря 2018

Я думаю, что из-за этой части кода activitiesLocationList[0] вы всегда получите первый объект.
может изменить его на activitiesLocationList[i], чтобы получить все данные объекта, тогда все должно быть в порядке.

0 голосов
/ 31 декабря 2018

Вы должны передать индекс i вместо 0, пока вы зацикливаетесь в этой строке activitiesLocationList[i]['acf']['activity_listing']....

...