У меня есть канал JSON, из которого мне нужно извлечь некоторую информацию, чтобы нанести маркеры на карту. Для этого мне нужно перебрать канал JSON, а затем перебрать конкретный объект в массиве.
Я могу заставить его пройти через верхний уровень (категорию), но попытка прокрутки каждой категории работает должным образом - я получаю ту же самую категорию, повторяющуюся, равную количеству категорий.
Структура массива / объекта следующая:
- 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.info('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'
Так что он почти делает то, что я хочу, но попадает только в первую категорию. Что я делаю неправильно?
Как мне заставить его проходить по каждой категории, циклически повторяя содержимое?
Вспомню на следующий раз, кажется, решение уже найдено на этот раз.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны передать индекс i вместо 0, пока вы зацикливаете эту строку activitiesLocationList[i]['acf']['activity_listing']....
Фактически вы получаете доступ к 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.info('Place Name: ' + placeName);
})
}
Конечно! Вот что происходит после 2 недель кодирования по 14+ часов в день! Такая ошибка новичка, спасибо! Принять этот ответ, поскольку он объясняет проблему, а не просто формулирует решение.
Я думаю, что благодаря этой части кода activitiesLocationList[0] вы всегда получите первый объект.
можно изменить его на activitiesLocationList[i], чтобы получить данные каждого объекта, тогда все будет в порядке.
Используйте 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.info('Place Name: ' + placeName);
})
}
Можете ли вы опубликовать входной объект как код, а не psuedocode, чтобы у нас был минимальный воспроизводимый пример для запуска и отладки?