Когато изучавате софтуер, ще трябва да изберете какво. Просто има твърде много, за да изберете всичко. Толкова много е наистина готино и удовлетворяващо, но някои са по-досадни и се чувстват като работа. Има обаче неща, които трябва да знаете; основите са изискване, независимо какво изберете. Независимо дали става въпрос за машинно обучение и невронни мрежи или API за уеб разработка и REST, ще трябва да знаете основите и за двете.

Структурите на данни са доста фундаментални и познаването им е от решаващо значение. Ако сте нов в програмирането, вие вече работите със структури от данни като масиви и обектни литерали, без дори да го знаете. Докато копаете по-дълбоко, ще научите разходите и ползите от използването на различни типове. Има причина масивите да не са всичко и край на всички структури от данни.

Масивите [] са много удобни за потребителя и идват с функционалност от кутията. Ако искате да извадите само конкретни елементи от масив? Array.prototype.filter ви позволява да направите това. JavaScript е прототип и следователно ще търси вашия масив и няма да намери филтърния метод. След това ще търси родителския си прототип на масив, където се намира филтърният метод. Искате ли да добавите елемент в началото на вашия масив? Array.prototype.unshift ще ви позволи да направите това. Това обаче ще доведе до неочаквани разходи. Нека помислим защо. Какво означава това за вашия масив в последния случай? Първият елемент е наскоро неизместеният елемент в масива, но сега вторият елемент първоначално е бил първият елемент. Вторият елемент беше избутан във втория слот. Това се случва за всеки елемент в масива. Сега всеки елемент трябва да се движи и това струва памет и време. Има BigO(n) времева сложност, n означава броя на елементите в масива. Ако масивът ви е малък, той е незначителен, но ако масивът ви е от 1000 елементи, това ще доведе до проблеми с времето и паметта. Нека тогава да поправим това. Помнете основите и ако трябва да измислите персонализирана структура от данни, за да разрешите това, какво бихте създали?

Дан Абрамов създател на Redux и момче-гений (той беше на около 22 години, когато създаде Redux) използваше функции, наречени редуктори и които имаха логика на изявление за превключване, която връщаше обекти, за да създаде редукс. Това е доста добър намек за това какво да използвате; в края на деня трябва да използвате основите.

Нека създадем обект, който ще замени нашия масив за съхраняване на информация. Този масив ще трябва да съхранява данни, но също така трябва да може да намира други други данни, които ще трябва да съхраняваме. Това ще означава, че ще трябва да добавим линия, указател или ръб към тези данни. В математиката „връх“ е точка, където множество линии или ръбове се събират в една точка. Така че ще използваме синтаксиса на ES6 за „създаване на клас“ Vertex. Класовете в JavaScript са просто синтактична захар за Object factories. Нашият връх ще има свойство данни. Ние сме създателите на нашата структура от данни, така че нека добавим някои методи за добавяне на указатели към данните. Като начало нека направим нашето свойство Vertex и съседно свойство и свойство данни.

По-горе е стандартна реализация на възел в свързан списък. Тези възли също са в „Дървета“ и „Графики“ с модификации съответно за деца или съседство.

Можем да вземем тази идея и да направим „графика“. В математиката определението е абстрактно върхове, свързани с моите ръбове. Всичко може да бъде графика. Един град може да бъде график, където сградите са върховете, а ръбовете са пътищата, или сграда може да бъде график, където стаите са върхове, а ръбовете са залите и асансьорите. Тук нашите данни се съхраняват в клас Node и графиката ще бъде представена от класа Graph. Свойството Adjacency Matrix на класа ще представлява графиката. Матрицата ще бъде редове и колони, където 1 ще означава съседство, а 0 ще бъде несъседно. Ако две сгради могат да бъдат посетени чрез пътуване по път, тогава те имат съседство, в противен случай не са съседни.

Тук две сгради са на една улица. Както можете да видите от техните адреси, те са съседни, както е представено от 1 в матрицата.

#row 1 column 1 is 0 because building1 cannot be adjacent to itself
[ 
 [0,1], 
 [1,0] 
] 
#row 2 column 1 is a 1 because building2 is adjacent to building 1

Това са само част от начините за съхраняване на данни и свързването им. Има много повече начини за кодиране на това и представяне на данни/съхраняване на данни/извличане на данни.