Почему элементы не помещаются в массив?

У меня есть следующий фрагмент кода в приложении react-native.

responseJson — это то, что я получаю от вызова API.

Проблема в приведенном ниже коде заключается в том, что элементы, которые я помещаю в resultJson, не существуют вне вызова функции map, т. е. resultJson остается пустым, даже если внутри map вызовов resultJson обновляется. quaterly — это массив, но его значение сохраняется после вызова map. Я добавил статические данные для responseJson.

Что не так в коде ниже?

    let responseJson = { "Q1-2018": [ { "total_rows": 742, "avg_price": "2776280.6469", "avg_sqft_price": "1592.5728", "yr": 2018, "evidence": "ACT" }, { "total_rows": 133, "avg_price": "1381205.4436", "avg_sqft_price": "974.9925", "yr": 2018, "evidence": "MOR" }, { "total_rows": 147, "avg_price": "1730154.9524", "avg_sqft_price": "1472.4966", "yr": 2018, "evidence": "MOU" }, { "total_rows": 580, "avg_price": "1797097.3069", "avg_sqft_price": "2043.7190", "yr": 2018, "evidence": "TRA" }, { "total_rows": 61, "avg_price": "4075409.8361", "avg_sqft_price": "1415.8033", "yr": 2018, "evidence": "VAL" } ], "Q2-2018": [ { "total_rows": 1090, "avg_price": "2585032.2220", "avg_sqft_price": "1578.9303", "yr": 2018, "evidence": "ACT" }, { "total_rows": 199, "avg_price": "1426902.3769", "avg_sqft_price": "1060.0000", "yr": 2018, "evidence": "MOR" }, { "total_rows": 84, "avg_price": "1900348.8214", "avg_sqft_price": "1332.6071", "yr": 2018, "evidence": "MOU" }, { "total_rows": 638, "avg_price": "1810675.6536", "avg_sqft_price": "1681.9812", "yr": 2018, "evidence": "TRA" }, { "total_rows": 60, "avg_price": "2908750.0000", "avg_sqft_price": "1458.7667", "yr": 2018, "evidence": "VAL" } ], "Q3-2018": [ { "total_rows": 971, "avg_price": "2562323.0505", "avg_sqft_price": "1569.8218", "yr": 2018, "evidence": "ACT" }, { "total_rows": 192, "avg_price": "1574309.7813", "avg_sqft_price": "1175.7865", "yr": 2018, "evidence": "MOR" }, { "total_rows": 56, "avg_price": "1807243.6429", "avg_sqft_price": "1275.6607", "yr": 2018, "evidence": "MOU" }, { "total_rows": 371, "avg_price": "1629974.8113", "avg_sqft_price": "1389.6577", "yr": 2018, "evidence": "TRA" }, { "total_rows": 65, "avg_price": "1922692.3077", "avg_sqft_price": "1341.2615", "yr": 2018, "evidence": "VAL" } ], "Q4-2018": [ { "total_rows": 1426, "avg_price": "2541386.3191", "avg_sqft_price": "1527.2468", "yr": 2018, "evidence": "ACT" }, { "total_rows": 163, "avg_price": "1440970.0491", "avg_sqft_price": "952.3129", "yr": 2018, "evidence": "MOR" }, { "total_rows": 91, "avg_price": "1571781.8352", "avg_sqft_price": "1244.3077", "yr": 2018, "evidence": "MOU" }, { "total_rows": 429, "avg_price": "1626291.2727", "avg_sqft_price": "1434.8834", "yr": 2018, "evidence": "TRA" }, { "total_rows": 61, "avg_price": "1797540.9836", "avg_sqft_price": "1251.2623", "yr": 2018, "evidence": "VAL" } ], "Q1-2019": [ { "total_rows": 1391, "avg_price": "2755570.1855", "avg_sqft_price": "1457.6204", "yr": 2019, "evidence": "ACT" }, { "total_rows": 126, "avg_price": "1005182.1111", "avg_sqft_price": "812.4762", "yr": 2019, "evidence": "MOR" }, { "total_rows": 18, "avg_price": "1680666.6667", "avg_sqft_price": "1287.3333", "yr": 2019, "evidence": "MOU" }, { "total_rows": 362, "avg_price": "1769586.9586", "avg_sqft_price": "1506.7099", "yr": 2019, "evidence": "TRA" }, { "total_rows": 40, "avg_price": "1974375.0000", "avg_sqft_price": "1292.5500", "yr": 2019, "evidence": "VAL" }]};
    let resultJson = [];
    let avgJson = [];
    let quarterly = [];
    Object.keys(responseJson).map((value, key) => {
      quarterly.push(value);
      responseJson[value].map((value, key) => {
        const evidence = value.evidence;
        if (typeof resultJson[evidence] === "undefined") {
          resultJson[evidence] = [];
        }
        resultJson[evidence].push(value);
        console.info(
          "resultJson[evidence]",
          resultJson[evidence].length,
          resultJson[evidence]
        );
      });
    });

Нажмите редактировать, затем редактор фрагмента [<>] создаст минимальный воспроизводимый пример — ваш код никак не отреагирует.

mplungjan 20.03.2019 13:45

где/что quarterly? без надлежащих демонстрационных данных невозможно рассуждать о том, что происходит в вашем коде.

zaphod1984 20.03.2019 13:47

Вы говорите, что «responseJson — это то, что я получаю от вызова API». Означает ли это, что весь этот код находится в асинхронном обратном вызове? Вы пытаетесь получить к нему доступ вне асинхронного вызова?

Mark 20.03.2019 13:48

Ганне нужны вары

Hogan 20.03.2019 13:49

@MarkMeyer нет, я не пытаюсь получить к нему доступ вне асинхронного вызова. да, вы правы, это асинхронный обратный вызов

the ultimate user 20.03.2019 13:50

Неясно, пытаетесь ли вы создать объект, содержащий кучу массивов или просто плоский массив. Похоже, вы должны либо инициализировать resultJson как объект с помощью resultJson = {}, либо если вы пытаетесь создать один плоский массив, вы должны просто использовать resultJson.push(value)

Mike Feltman 20.03.2019 13:54

map() - это неправильная вещь для использования здесь....

epascarello 20.03.2019 14:00

@epascarello, пожалуйста, предложите любую другую альтернативу

the ultimate user 20.03.2019 14:02

Код запускается, если квартал написан правильно

mplungjan 20.03.2019 14:03
Поведение ключевого слова "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) для оценки ваших знаний,...
0
9
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пытаетесь получить доступ к ключам из массива, как если бы это был объект. Каким-то образом Javascript позволяет это и фактически сохраняет их, поэтому вы можете выполнить console.info(resultJson["ACT"]) после и все равно получить значение.

Но, вероятно, имеет больше смысла, чтобы resultJson был объектом.

let resultJson = {}

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