Javascript: цикл по объекту в массиве

У меня есть канал 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'

Так что он почти делает то, что я хочу, но попадает только в первую категорию. Что я делаю неправильно?

Как мне заставить его проходить по каждой категории, циклически повторяя содержимое?

Можете ли вы опубликовать входной объект как код, а не psuedocode, чтобы у нас был минимальный воспроизводимый пример для запуска и отладки?

CertainPerformance 31.12.2018 04:13

Вспомню на следующий раз, кажется, решение уже найдено на этот раз.

AlxTheRed 31.12.2018 04:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
59
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны передать индекс 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+ часов в день! Такая ошибка новичка, спасибо! Принять этот ответ, поскольку он объясняет проблему, а не просто формулирует решение.

AlxTheRed 31.12.2018 04:29

Я думаю, что благодаря этой части кода 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);

    })
}

Другие вопросы по теме