Массив это ссылочный тип, выводя его в консоль он при открытии будет иметь актуальные данные, то есть, пока ты выводил пустой массив и нажимал на кнопку раскрыть, он успел его заполнить и отобразить то что в нем находится на момент открытия а не на момент выполнения. Для наглядности выведи массив через JSON.stringify.
А решение собственно это - дождаться выполнения асинхронного кода и потом оперировать полученным значением. Например так
async function doRequest() {
const months = await new Promise(resolve => {
$.post('data.php',data => {
const lastMonth = [];
pars = $.parseJSON(data);
for(let prop in pars)
lastMonth.push(pars[prop]);
resolve(lastMonth);
});
});
console.log(months);
}
doRequest();
lastMonth[0]успешно выводит значение из массива, ваша проблема не воспроизводится https://i.stack.imgur.com/7zgdo.png – andreymal Jan 07 '22 at 12:00console.log(JSON.stringify(lastMonth))и вы увидите, что массив на самом деле НЕ ЗАПОЛНЯЕТСЯ, потому что вы вызываете console.log слишком рано и не дожидаетесь момента, когда он заполнится. – andreymal Jan 07 '22 at 12:04