0

This code is about storing data in localStorage. If localStorage is yet empty I want to create an array of such type:

(Key:)Events (Value:)[{Date: "", Event: "", Participants: "", Description: ""}]

If there's yet some data in localStorage then runs the code else if...

if (tdAttr) {


    var fastDate = tdAttr.getAttribute('data-cell');
    var fastEvent = fastAddEvent.value;

    var events = JSON.parse(localStorage.getItem('events')) || [];
    localStorage.setItem('events', JSON.stringify(events));



    var addFastEvent = function () {

        if (events.length == 0) {
            //JS doesn't see the "events" variable inside this scope
        } else if (events.length > 0) {

            for (var i = 0; i < events.length; i++) {

                if (events[i].Date == fastDate) {

                    events[i].Event = fastEvent;
                    events[i].Participants = "";
                    events[i].Description = "";


                };


                break;

            };



        };


        localStorage.setItem('events', JSON.stringify(events));


    };


    addFastEvent();

};

So, issue #1: Why doesn't JS define the events variable inside the firts if condition (console.log: Uncaught TypeError: Cannot read property 'length' of undefined)?

Though after else if... it does.

Issue #2: How do I create my array

(Key:)Events (Value:)[{Date: "", Event: "", Participants: "", Description: ""}]

inside the first if condition? I tried

if (events.length == 0) {
    var events = [];
    arr.push({
        Date: fastDate,
        Event: fastEvent,
        Participants: "",
        Description: ""
    });

}

But it still doesn't see the variable events (even inside the if condition) and shows me the error.

UPD I managed to solve the issue #2:

       if (events.length == 0) {

                            localStorage['events'] = events.push({

                              Date: fastDate, 
                              Event: fastEvent, 
                              Participants: "", 
                              Description: ""

                            });
                        }

Though, still can't understand why the variable is "invisible" inside the first if condition. Let's say, there's no stored items when the condition starts to check, but I understand my variable

     var events = JSON.parse(localStorage.getItem('events')) || [];

like this - We get stored items, if there are no stored items, we create an array. It seems like JS understands it like - We get stored items or an existing yet array

Alexandr Belov
  • 1,804
  • 9
  • 30
  • 43

0 Answers0