Существует множество различных способов имитировать стек, но, в конце концов, все они сводятся к тому, чтобы быть вариацией объекта JavaScript.JavaScript не имеет встроенных структур, таких как Stacks, Queues или Linked Lists. Даже Array - это форма объекта с некоторыми дополнительными методами.Прототипирование Javascript - это то, что дает вам возможность имитировать эти структуры и формировать вариации объектов.Простым примером, имитирующим стек, может быть использование конструктора, который генерирует объект с его собственными методами:
function Stack() {
return {
items: [],
push: function ( item ) {
this.items[this.items.length] = item;
}
pop: function () {
const topItem = this.items[this.items.length - 1];
this.items.length = this.items.length - 1;
return topItem;
}
}
}
Однако в Javascript вы, скорее всего, никогда не будете имитировать стек, подобный этому.Обычно вы просто используете методы массива, как вы делали выше. Идея работы стека - вот что важно .
Например, допустим, вы получаете набор данных, который включает время начала и время окончания, когда пользователи были на вашем сайте., упорядоченный по времени начала (например, [[02:30, 03:00][02:45, 3:15][4:00, 5:30][5:00, 6:00]
), и ваша работа отображала график времени, когда пользователи были на вашем сайте, а не на вашем сайте.Одним из решений, чтобы увидеть промежутки и сохранить их в порядке, было бы объединить перекрывающиеся интервалы (пример становится [[2:30, 3:15][4:00, 6:00]]
).
Вы можете сделать это с помощью «стека», поместив первый элемент в стек, сравнивая это со следующим интервалом в вашей коллекции.Если бы он не перекрывался, вы просто поместили бы этот элемент в стек, но если бы он действительно перекрылся, вы бы вытолкнули его из стека, объединили два и затем вернули его обратно в стек для сравнения, когдаследующий элемент.
Так что да, в JavaScript вы, вероятно, все равно использовали бы для этого массив, но объединяя идею структуры стека.Если вы начнете работать на других языках (обычно статических, таких как Java или C ++), у них будут встроенные стеки, очереди, связанные списки и т. Д., Поэтому важно понимать, как они работают, а также плюсы / минусы / варианты использования для каждого из них.их.