получение только последнего объекта в функции forEach для массива - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь перебрать массив, созданный каждый раз, когда нажимаю на динамически создаваемый html, и я использую функцию forEach, чтобы перебирать его.Моя проблема заключается в том, что только последний объект отображается в функции forEach в массиве, и ни одно из других значений в массиве не отображается.Вот моя функция, чтобы сделать это -

// //handler to show text from eventData array
document.addEventListener('click', (e)=> {
    let noEvents = document.getElementsByClassName('no-Events')[0];
    let eventsDescContainer = document.querySelector('.events');

    if(e.target.classList.contains('day')){
        [...eventData['events']].forEach((event)=>{
            if(event['day']===e.target.innerHTML && event['month']===headerMonths.innerHTML && event['year']===headerYears.innerHTML){


            //the event['day'], event['month'], and event['year'] values are not looping through the array, they are only showing whatever the last object values I added to the eventData array

                //show event Text
                showEventText(event['description'], event['month'], event['year'], event['day']);

            }  else {
                console.log(e.target.innerHTML + event['day']);
                console.log(headerMonths.innerHTML + event['month'])
                console.log(headerYears.innerHTML + event['year']);
                console.log(eventData['events']);
                clearEventText(headerYears.innerHTML);
                noEvents.style.display='initial';
                noEvents.innerHTML = `There are no events on ${headerMonths.innerHTML} ${e.target.innerHTML} ${headerYears.innerHTML}`;

                //reverse flexDirection to original direction
                eventsDescContainer.style.flexDirection = 'column';
            }
        });
    }
});



//JSON event data


let eventData = {
    "events": [
        {
            "description": 'es',
            "year": '2018',
            "month": 'Nov',
            "day": '28'
        }
    ]
 };

Он циклически перебирает массив eventData, но если я добавлю другой объект в массив eventData и попробую перебрать его в моем eventListener, eventListener получит толькоэлемент, который я только что добавил в массив, который является последним объектом в массиве, и он не будет перебирать остальную часть массива, чтобы получить более старые объекты.

Значения события ['day'], event ['month'] и event ['year'] не проходят через массив, они показывают только последние значения объекта, которые я добавил в eventDataмассив

Почему это происходит и как я могу это решить?

РЕДАКТИРОВАТЬ:

это функция, которую я использую для добавления новых объектов в массив eventData

 //adds json to eventData
function newEventJson(description, month, year, day){
let event = {
    "description": description,
    "year": year,
    "month": month,
    "day": day
 };
 eventData.events.push(event);

}

когда я использую console.log для отладки этого в моем eventListener, eventData ['events'] показывает все значения в массиве, но событие ['day],Событие ['month'] и event ['year'] все имеют те же значения, что и последний элемент в массиве eventData.

Вот ссылка на кодовый блок https://codepen.io/icewizard/pen/ZmJByP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...